Имею такую проблему: числовые значения типа decimal (10,3) хранятся в базе MySQL. После выборки в РНР-скрипте добавляются 2 значения из базы (34.680 + 55.000) и вычитается из 89.68.
Вместо ожидаемого нуля РНР выводит 7.1054273576E-15

Спустя 4 минуты, 54 секунды (28.01.2010 - 15:20) glock18 написал(а):
все просто - тип float имеет погрешность. это общеизвестный момент, относящийся к способу хранения этого типа в памяти, а значит не только к php, но и ко всем остальным языкам.
Спустя 2 минуты, 57 секунд (28.01.2010 - 15:23) bodik10 написал(а):
Цитата (glock18 @ 28.01.2010 - 12:20) |
все просто - тип float имеет погрешность |
и что делать? применять
sprintf()или
number_format()?
Спустя 34 минуты, 54 секунды (28.01.2010 - 15:58) Ice написал(а):
А если прям в базе резалт посчитать?
Спустя 25 минут, 4 секунды (28.01.2010 - 16:23) bodik10 написал(а):
Цитата |
А если прям в базе резалт посчитать? |
Очень много кода надо переписывать.
Мне просто интересно, почему эта погрешность типа float вылезла именно на этом выражении. В скрипте очень много операций с числами такого типа, и везде число выводится корректно.
Спустя 3 дня, 22 часа, 4 минуты, 51 секунда (4.02.2010 - 14:28) glock18 написал(а):
округляй до трех знаков и спи спокойно