Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
06.10.2020, 15:13
|
|||
---|---|---|---|
|
|||
округление |
|||
#18+
Здравствуйте! Подскажите пожалуйста, почему функция округления возвращает не то значение, которое я ожидаю.. FB 2.5 поле price типа numeric(15,2). значение = 125. делаю запрос: Код: sql 1.
возвращает 9659.675. это правильно. калькулятор тоже так считает. делаю округление: Код: sql 1.
получаю: 9 659,670 хотя ожидаю 9659,68 думаю, мб это функция делает бухгалтерское округление и зависит от четности предыдущего знака.. проверяю: Код: sql 1.
возвращает: 9 659,680 вот еще неудачные попытки добиться правильного округления: Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 15:30
|
|||
---|---|---|---|
|
|||
округление |
|||
#18+
Имя пользователяпочему функция округления возвращает не то значение, которое я ожидаю.. Потому что у тебя неправильные ожидания. Round на вход получает double precision. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 15:33
|
|||
---|---|---|---|
|
|||
округление |
|||
#18+
Посоветуйте, пожалуйста, как мне выйти из этой ситуации? мне хочется округлить до ближайшего целого. как это сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 15:42
|
|||
---|---|---|---|
|
|||
округление |
|||
#18+
Имя пользователя, речь про то, что 77.2774 непредставимо конечной двоичной дробью. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 15:42
|
|||
---|---|---|---|
|
|||
округление |
|||
#18+
Имя пользователякак это сделать? а) Округляй (и вообще вычисляй) в своём приложении, не грузи сервер левой работой. б) То же самое, но в UDR. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 15:50
|
|||
---|---|---|---|
|
|||
округление |
|||
#18+
Имя пользователя, странно, что в трёшке не могу получить неправильный результат. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Результат - 9659,68. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 16:27
|
|||
---|---|---|---|
округление |
|||
#18+
Дело в диалекте: 1-ый диалект: Код: plaintext 1. 2. 3. 4. 5.
А вот 3-ий диалект Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 16:48
|
|||
---|---|---|---|
|
|||
округление |
|||
#18+
Спасибо всем за оперативные ответы! да, действительно, у меня 1 диалект. в приложении округлять не могу, мне надо результат этого запроса скормить отчету. UDR сейчас срочно изучать, чтоб написать свою функцию round тоже нецелесообразно.. в общем, как-то печально.. не знаю, что делать.. ( ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 16:50
|
|||
---|---|---|---|
округление |
|||
#18+
hvlad Дело в диалекте: Для первого диалекта может помочь такой говнокод: ROUND( ROUND( 77.2774 * 125.00, 3 ), 2 ) ----- 9659.68 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 16:53
|
|||
---|---|---|---|
округление |
|||
#18+
YuRock, Только это может быть неправильно логически. Но можно в первом раунде 3 заменить на 8 - результат не изменится, но уже не так критично)) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 16:57
|
|||
---|---|---|---|
|
|||
округление |
|||
#18+
Спасибо! так сработало! сейчас осознаю, что это значит, потестирую на других примерах, но, вроде, подходит такое решение! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 16:58
|
|||
---|---|---|---|
округление |
|||
#18+
Код: sql 1.
Что показывает? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 16:59
|
|||
---|---|---|---|
|
|||
округление |
|||
#18+
Еще проверить наличие УДФ, round может быть переопределена. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 16:59
|
|||
---|---|---|---|
|
|||
округление |
|||
#18+
Имя пользователяприложении округлять не могу, мне надо результат этого запроса скормить отчету. Отчёту можно скармливать и неокруглённый результат. Форматировать числа это его прямая работа. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 17:00
|
|||
---|---|---|---|
округление |
|||
#18+
Ivan_Pisarevsky Еще проверить наличие УДФ, round может быть переопределена. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 17:44
|
|||
---|---|---|---|
|
|||
округление |
|||
#18+
WildSery Ivan_Pisarevsky Еще проверить наличие УДФ, round может быть переопределена. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 18:34
|
|||
---|---|---|---|
|
|||
округление |
|||
#18+
Имя пользователя Посоветуйте, пожалуйста, как мне выйти из этой ситуации? мне хочется округлить до ближайшего целого. как это сделать? У вас параметр округления, .674999999999999..(из-за двоичного представления мантиссы), поэтому он округляется до .67 Вы могли бы добавить микрокопейку перед округлением. Для 64-битного числа с плавающей запятой (double) это решит вашу проблему. Для float, микрокопейка может потеряться в короткой мантиссе. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 18:45
|
|||
---|---|---|---|
округление |
|||
#18+
Имя пользователя Посоветуйте, пожалуйста, как мне выйти из этой ситуации? мне хочется округлить до ближайшего целого. как это сделать? Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 23:11
|
|||
---|---|---|---|
округление |
|||
#18+
Имя пользователя сейчас осознаю, что это значит 9659.675 только выглядит так на экране, а внутрях может оказаться 9659.6749999999... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
06.10.2020, 23:15
|
|||
---|---|---|---|
округление |
|||
#18+
НеофитSQL Вы могли бы добавить микрокопейку перед округлением Добавлять эпсилон, допустимый для данной задачи и точности типа. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2020, 08:53
|
|||
---|---|---|---|
|
|||
округление |
|||
#18+
WildSery Код: sql 1.
Что показывает? Код: sql 1.
возвращает 9659,6700000000001 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2020, 08:55
|
|||
---|---|---|---|
|
|||
округление |
|||
#18+
Ivan_Pisarevsky Еще проверить наличие УДФ, round может быть переопределена. нет. это UDF. проверил ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2020, 09:09
|
|||
---|---|---|---|
|
|||
округление |
|||
#18+
НеофитSQL Имя пользователя Посоветуйте, пожалуйста, как мне выйти из этой ситуации? мне хочется округлить до ближайшего целого. как это сделать? У вас параметр округления, .674999999999999..(из-за двоичного представления мантиссы), поэтому он округляется до .67 Вы могли бы добавить микрокопейку перед округлением. Для 64-битного числа с плавающей запятой (double) это решит вашу проблему. Для float, микрокопейка может потеряться в короткой мантиссе. Код: sql 1.
такой вариант работает, спасибо за решение! но я не могу понять, какую долю копейки мне нужно использовать в данном случае. у меня price - это numeric(15, 2). умножая это поле на 77.2774, какой тип данных будет округлять ROUND? т.е. сколько надо прибавлять, чтоб не перевалить случайно в большую сторону? я хочу получить 4 знака после запятой после умножения, а потом округлить до 2 знаков. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
07.10.2020, 09:15
|
|||
---|---|---|---|
|
|||
округление |
|||
#18+
rdb_dev Имя пользователя Посоветуйте, пожалуйста, как мне выйти из этой ситуации? мне хочется округлить до ближайшего целого. как это сделать? Код: sql 1. 2. 3. 4. 5.
простите, не понял.. т.е. как работают данные функции я понимаю, но не усек, как мне их применить в моей ситуации ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=40&tablet=1&tid=1560235]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
147ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 263ms |
0 / 0 |