1 / 1 / 0
Регистрация: 17.07.2012
Сообщений: 16
|
|
1 | |
Округление числа18.07.2012, 11:27. Показов 15218. Ответов 31
Метки нет (Все метки)
Пожалуйста, объясните мне, почему у меня не получается округление. Что-то не так с синтаксисом?
Кол1: IIf ([Кол] Is Not Null; Round ([Таблица2]![Колич]*[Кол];2); [Таблица2].[Колич]) Ситуация такая - имеется древовидная структура. Это сборочные единицы со входящими в них опять таки сборками, деталями, винтиками всякими и прочим, и плюс материалы. Если кто близок к технике - то ему понятно будет что я хочу создать сводную спецификацию - выбрать все, что входит в блок или изделие. Всё, кроме материалов, меряется штуками, то есть целыми числами, а материала может быть, скажем, 0,1м. Вводить в миллиметрах не хочется, так как в другой сборке этого провода скажем будет 3м. В итоге в одной и той же графе есть целые (выглядят как целые) и вещественные числа. Скажем, некий провод входит в кабель, а этот кабель - в блок. Кабелей там может быть несколько, потому количество провода умножается на количество кабелей, а в иерархически следующей единице - на количество блоков. Если же смотреть по иерархии сверху вниз, то где-то вложенность обязательно заканчивается и число умноженное на нулл не должно стать нулл, а должно остаться собой. Вся беда в том, что при умножении 0,1 на 1 аксесс выдает скажем 0,100000467 и это число вылазит решеточками в графе. Как обойти этот момент и почему у меня не хочет работать round? Задавать вещественные числа в графе количество не хочется, так как 1,00 деталей выглядит нелепо. Заранее спасибо. Nz мне не подходит, так как нули в пустых графах мне тоже не нужны. Добавлено через 12 минут Забыла сказать - округление до целого в этом выражении работает. Но меня это не устраивает. Добавлено через 9 минут В более простых выражения то же самое - round работает без второго параметра, второй параметр через запятую (как в хелпе) не позволяет, а через точку с запятой, похоже, не понимает. Ни в кавычках ни без.
0
|
18.07.2012, 11:27 | |
Ответы с готовыми решениями:
31
Сделать округление до целого числа округление Округление Округление |
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
|
19.07.2012, 12:09 | 21 |
А при чем все это? Вы показали скрин на котором ясно видно число 0,100000001490116 и результат его округления, не помещающийся в отведенную длину поля. Я задал это число, как константу в запросе, и выполнил его округление.
Думаю, что без предоставления фрагмента базы, в котором проявляется ваш эффект "неверного" округления, дальнейшее обсуждение не имеет смысла.
0
|
3356 / 1775 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
|
||||||
19.07.2012, 12:40 | 22 | |||||
Да нет, все верно говорит, по поводу Round. Че то с ним не то.
Если просто прописать в VBA в окне отладки:
0
|
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
||||||
20.07.2012, 11:08 | 23 | |||||
Round без второго параметра (количество знаков после точки), всегда отрабатывает правильно. Если же параметр определен, то поведение Round зависит от того, как компилятор распознает тип поля. Причем иногда компилятор ошибается (или перестраховывается, на всякий случай воспринимая число как текст). Поэтому, задавая полю в Round тип явно, например, функцией Val, можно добиться правильной работы Round. Пример правильно работающего запроса из выложенной БД db_test.mdb
0
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
|
20.07.2012, 18:30 | 24 |
На картинке, полученный мной, результат вашего запроса.
ИМХО, существует некоторая проблема (а может мое непонимание) с обработкой Jet типа Single, т.к. если изменить тип поля Кол с Single на Double, то Round отрабатывает нормально (без лишних хвостов), аналогичный результат Round(CDbl(Кол),2) можно подучить и при Single. При Single хвосты появляются даже у результата такой элементарной операции, как сложение: Кол+0. Следует отметить, что числа с хвостами представлены на экране с разрядностью, соответствующей Double, но определение типа TypeName(Round(Кол,2)) возвращает Single.
0
|
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
|
20.07.2012, 19:28 | 25 |
minob, правильно ли я понял, что Round с параметром numdecimalplaces=2, выдает число без десятичных знаков, как на вашем рисунке? Мне не удалось получить такое. Испытывал на 2 версиях акса. Смотрите картинку.
Ваши выводы относительно Single точны, я их получил и ранее, но не опубликовал, поскольку не знал интереса к этой теме.
0
|
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
|
|
21.07.2012, 07:16 | 27 |
Да. Проверял на Access2003 и Access2010.
Разница в результатах обусловлена различием системного разделителя целой и дробной части: у вас точка и тогда ?Val(2.345) 2.345 у меня запятая, при которой ?Val(2.345) 2
1
|
3 / 3 / 0
Регистрация: 03.08.2015
Сообщений: 156
|
|
30.05.2016, 15:27 | 28 |
Терни, подскажите, как древовидную структуру для спецификаций в Аксессе создать?!!! HELP!!!! Очень нужно, но сколько не искал - так и не нашёл решения(((
0
|
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
|
30.05.2016, 15:40 | 30 |
Это контрол типа TreeView. Живет в библиотеке Windows Common Control, файл mscomctl.ocx. Работа с тривью хорошо описана у Шкуренко - http://www.hot.ee/jurisfox/vfp... _01_ru.htm. На форуме есть примеры работы тривью.
1
|
3 / 3 / 0
Регистрация: 03.08.2015
Сообщений: 156
|
|
30.05.2016, 16:06 | 31 |
mobile, как-то уже пробовал это прочесть и разобраться. Тогда не вышло. Попробую второй заход!
0
|
1 / 1 / 0
Регистрация: 17.07.2012
Сообщений: 16
|
|
30.05.2016, 18:02 [ТС] | 32 |
Я-то отвечу, если вспомню, как я это делала четыре года назад
Я не программист, потому скорей всего мое решение не самое изящное. Вложенная форма называется "матрешка", что отражает суть идеи. Форм в матрешке тупо сделано столько, сколько уровней вложенности дерева. Вы киньте мыло в личку, я вам пришлю вычищенную от данных базу. Она не вся работает, так как я теперь в другом месте работаю, и админ отказывается Аксесс ставить всем. Вот сама ее веду на подпольном ноуте. Стимула доводить базу до ума нет. Если вы подхватите идею и доработаете так, чтобы ВП составлялась в отчете (он виснет при создании). То я была бы рада иметь ваш вариант.
1
|
30.05.2016, 18:02 | |
30.05.2016, 18:02 | |
Помогаю со студенческими работами здесь
32
Округление в VBA Округление в access математическое округление Точное округление Округление часов Округление в Аccess Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |