|
Опять про округление
|
|||
---|---|---|---|
#18+
Доброго времени суток. Помогите понять причину, на будущее? Есть ПО с небольшими расчетами. Считаем в процедурах на сервере. Точность не для космических полетов, но нужна. Когда-то перешел на rfunc, из-за его функции calcexpr - это при тестах решало проблему с округлением 0,5 (нормально считает, не думает, что 0.5 - это 0.49999999). Сегодня натолкнулись на проблему в ROUND, и во встроенной функции, и в той, что в rfunc: Код: sql 1.
возвращает верно, 226598.21 ок Код: sql 1.
226598.205 - да, все ок, так и выходит но если объединить: Код: sql 1.
- т.е., вычислить это значение, и сразу округлить, то почему-то, возвращает 226598.20, а не 226598.21 (( Обрамил calcexpr cast as Numeric(18,10) - начало считать правильно. Но почему сразу то не считает, ведь поэтапные проверки - все расчеты верные. И что-то мне подсказывает, что неправильно так делать. Или правильно? Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2017, 11:36 |
|
Опять про округление
|
|||
---|---|---|---|
#18+
Devillio, А calcexpr это самописная хранимка? У выходного параметра какой тип? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2017, 12:55 |
|
Опять про округление
|
|||
---|---|---|---|
#18+
KreatorXXI, DECLARE EXTERNAL FUNCTION CALCEXPR CSTRING(16383), CSTRING(16383) RETURNS DOUBLE PRECISION BY VALUE это функция из готовой библиотеки rFunc ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2017, 13:23 |
|
Опять про округление
|
|||
---|---|---|---|
#18+
Devillio, потому что RETURNS DOUBLE PRECISION BY VALUE ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2017, 13:27 |
|
Опять про округление
|
|||
---|---|---|---|
#18+
Симонов Денис, Ну и что? В описании round сказано, что возвратить может и BIGINT. Devillio, версия FB? Может в этом дело? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2017, 14:24 |
|
Опять про округление
|
|||
---|---|---|---|
#18+
KreatorXXI, так происходит на 2.5 и на 3.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2017, 14:29 |
|
Опять про округление
|
|||
---|---|---|---|
#18+
KreatorXXI, Devillio226598.205 - да, все ок, так и выходит потому что сам вывод уже округлённый (IBE округляет при отображении в гриде) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2017, 14:37 |
|
Опять про округление
|
|||
---|---|---|---|
#18+
Симонов Денис, да, спасибо. И правда, результат 226598,204999999958... Блин! Да как считать-то )))) Правильно везде cast с нужной точностью впихивать? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2017, 14:53 |
|
|
start [/forum/moderation_log.php?user_name=FolkHealer]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
54ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 705ms |
total: | 883ms |
0 / 0 |