|
Округления DW Глюк или фича? PB 9.0.3 8836
|
|||
---|---|---|---|
#18+
Такой вот трабл с округлением 8.20 *(7.5 /100) = 0.615 round(8.20 *(7.5 /100),2)=0.61 round(0.615,2) =0.62 Тестовое DW приложено Решение нашел через заднюю дверь round(double(string(8.20 *(7.5 /100))),2)=0.62 И что - везде так писать теперь? А мне надо с ККМ работать... А он сволочь-то правильно округляет как ни странно ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2009, 17:59 |
|
Округления DW Глюк или фича? PB 9.0.3 8836
|
|||
---|---|---|---|
#18+
Может все-таки использовать truncate вместо round ----------------------------------------------------------------------------- Главная деталь любой машины - голова ее владельца ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2009, 21:23 |
|
Округления DW Глюк или фича? PB 9.0.3 8836
|
|||
---|---|---|---|
#18+
spas2001Может все-таки использовать truncate вместо round ----------------------------------------------------------------------------- Главная деталь любой машины - голова ее владельца Нет, надо просто внимательно почитать как Datawindow Engine делает округление, datatype promotion, ну и про operator precedence тоже не помешает.. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2009, 22:30 |
|
Округления DW Глюк или фича? PB 9.0.3 8836
|
|||
---|---|---|---|
#18+
Гриценко А.В.Такой вот трабл с округлением 8.20 *(7.5 /100) = 0.615 round(8.20 *(7.5 /100),2)=0.61 round(0.615,2) =0.62 Никакого трабла нету, вернее трабл конечно есть, но это поведение - не баг, а особенность работы с double в языках программирования. Дело в том что для компьютера первое равенство неверно отсчета из-за погрешности преобразования между двоичной и десятичной системами при работе с double. 8.20 *(7.5 /100) дает 0.61499999999999988 А это при окрулении до 2 знаков действительно 0.61 У вас получилось 0.615 вероятно потому что при отображении результат неявно округлился до 3 или более знаков либо вы считали вручную :). Что делать? Ваше решение через string конечно выбросить - оно работает через побочные эффекты. Правильное решение: все промежуточные результаты операций, видимые вне формулы, надо округлять до некоторого разумного числа знаков, например 4 (зависит от точности входных данных, для сумм это 4: разрядность копеек^2). Например: a) 8.20 *(7.5 /100) должно быть записано как round(8.20 *(7.5 /100), 4) b) round(8.20 *(7.5 /100), 2) должно быть записано как round(round(8.20 *(7.5 /100), 4),2) Т.е. (b) рассматривается как операция round(а, 2) . Поэтому имеет смысл так и оформить (a) в виде отдельного compute, а в (b) его использовать. Ну и естественно round(а, 2) нет смысла округлять до 4. Вообще, правильно округлять вообще все промежуточные результаты, но на практике имеет смысл округлять только видимые(возвращаемые) значения. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2009, 22:48 |
|
Округления DW Глюк или фича? PB 9.0.3 8836
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Дело в том что для компьютера первое равенство неверно отсчета из-за погрешности преобразования между двоичной и десятичной системами при работе с double. 8.20 *(7.5 /100) дает 0.61499999999999988 А это при окрулении до 2 знаков действительно 0.61 вот эт да!!! я даж калькулятор на батарейках достал - 8.20 *(7.5 /100) получается 0.615 :) и (7.5 /100)*8.20 тоже 0.615 если посмотреть его тестовую dw, то на самом деле - баг вроде ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2009, 23:22 |
|
Округления DW Глюк или фича? PB 9.0.3 8836
|
|||
---|---|---|---|
#18+
хотя round(round(8.20 *(7.5 /100), 4),2) прокатывает!!!? о как!! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2009, 23:24 |
|
Округления DW Глюк или фича? PB 9.0.3 8836
|
|||
---|---|---|---|
#18+
и при чем тут double? в хелпе написано автор Round DataWindow expression function Return value Decimal. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2009, 23:31 |
|
Округления DW Глюк или фича? PB 9.0.3 8836
|
|||
---|---|---|---|
#18+
VanoRи при чем тут double? в хелпе написано автор Round DataWindow expression function Return value Decimal. Погрешность возникает не в Round, а при вычислении выражения, поэтому какой тип возвращает или принимает Round - не важно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2009, 00:03 |
|
|
start [/forum/topic.php?fid=15&fpage=34&tid=1336280]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 313ms |
total: | 446ms |
0 / 0 |