Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/76: Рейтинг темы: голосов - 76, средняя оценка - 4.74
1 / 1 / 0
Регистрация: 17.07.2012
Сообщений: 16
1

Округление числа

18.07.2012, 11:27. Показов 15218. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пожалуйста, объясните мне, почему у меня не получается округление. Что-то не так с синтаксисом?

Кол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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2012, 11:27
Ответы с готовыми решениями:

Сделать округление до целого числа
Как сделать округление до целого числа? Я слышал, что есть Round, но попробовал и не получилось.

округление
Снова здравствуйте, у меня возникла такая проблема.. в запросе я вычисляю перевод валют указывая к...

Округление
скажите пожалуйста как сделать чтобы не округлялось число ??

Округление
При расчетах в форме получается число, к примеру, 1234,5. Стандартные функции округляют это число...

31
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
19.07.2012, 12:09 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Терни Посмотреть сообщение
Вы умножали с проверкой не пустое ли одно из значений? И у вас в таблице есть целые и вещественные значения, которые после этих преобразований должны выводиться либо с ноликами после запятой либо без запятой и ноликов?
А при чем все это? Вы показали скрин на котором ясно видно число 0,100000001490116 и результат его округления, не помещающийся в отведенную длину поля. Я задал это число, как константу в запросе, и выполнил его округление.
Думаю, что без предоставления фрагмента базы, в котором проявляется ваш эффект "неверного" округления, дальнейшее обсуждение не имеет смысла.
0
3356 / 1775 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
19.07.2012, 12:40 22
Цитата Сообщение от minob Посмотреть сообщение
А при чем все это?
Да нет, все верно говорит, по поводу Round. Че то с ним не то.
Если просто прописать в VBA в окне отладки:
Visual Basic
1
2
?Round((2.345),2)
 2,35
Если в запросе:
Миниатюры
Округление числа   Округление числа  
Вложения
Тип файла: rar db_test.rar (8.4 Кб, 18 просмотров)
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
20.07.2012, 11:08 23
Round без второго параметра (количество знаков после точки), всегда отрабатывает правильно. Если же параметр определен, то поведение Round зависит от того, как компилятор распознает тип поля. Причем иногда компилятор ошибается (или перестраховывается, на всякий случай воспринимая число как текст). Поэтому, задавая полю в Round тип явно, например, функцией Val, можно добиться правильной работы Round. Пример правильно работающего запроса из выложенной БД db_test.mdb
SQL
1
2
SELECT tblTest.id, tblTest.Кол, tblTest.Колич, Round(val(Кол),2) AS RoundКол
FROM tblTest;
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
20.07.2012, 18:30 24
Цитата Сообщение от mobile Посмотреть сообщение
Пример правильно работающего запроса из выложенной БД db_test.mdb
На картинке, полученный мной, результат вашего запроса.
ИМХО, существует некоторая проблема (а может мое непонимание) с обработкой Jet типа Single, т.к. если изменить тип поля Кол с Single на Double, то Round отрабатывает нормально (без лишних хвостов), аналогичный результат Round(CDbl(Кол),2) можно подучить и при Single.
При Single хвосты появляются даже у результата такой элементарной операции, как сложение: Кол+0.
Следует отметить, что числа с хвостами представлены на экране с разрядностью, соответствующей Double, но определение типа TypeName(Round(Кол,2)) возвращает Single.
Миниатюры
Округление числа  
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
20.07.2012, 19:28 25
minob, правильно ли я понял, что Round с параметром numdecimalplaces=2, выдает число без десятичных знаков, как на вашем рисунке? Мне не удалось получить такое. Испытывал на 2 версиях акса. Смотрите картинку.

Ваши выводы относительно Single точны, я их получил и ранее, но не опубликовал, поскольку не знал интереса к этой теме.
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
20.07.2012, 19:30 26
Картинка отклеилась
Миниатюры
Округление числа  
0
3544 / 1118 / 94
Регистрация: 13.03.2011
Сообщений: 1,513
21.07.2012, 07:16 27
Цитата Сообщение от mobile Посмотреть сообщение
minob, правильно ли я понял, что Round с параметром numdecimalplaces=2, выдает число без десятичных знаков, как на вашем рисунке?
Да. Проверял на 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
шапоклякистка 8-го дня
3679 / 2239 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
30.05.2016, 15:40 29
Цитата Сообщение от Rikozenit Посмотреть сообщение
Терни, подскажите, как древовидную структуру для спецификаций в Аксессе создать?!!!
Rikozenit, вы обращаетесь к человеку, который последний раз был на форуме в 2012 году. Врядли он вам ответит.
0
Эксперт MS Access
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2016, 18:02
Помогаю со студенческими работами здесь

Округление в VBA
Имеется поля 111, 222, 333, 444 с типом данных "Денежный" с двумя знаками после запятой. Поле...

Округление в access
Привет Всем!!!!!!!! Подскажите пожалуйста, как в access округлить полученное значение, к примеру...

математическое округление
приветствую, форумчане! Ищу способ выполнения математическое округление до целых с условием 0,5...

Точное округление
в общем проблема такова: округляю с помощью ROUND(). округляет но не так, как в школе учили:...

Округление часов
Добрый день, вечер,ночь... подскажите как из значения продолжительности работы в формате 122:31:05...

Округление в Аccess
Возможно ли в Access не математическое округление Round(число;0),а например как в экселе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru