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