Почему при работе с цифрами с плавающей запятой встречаются подобные глюки? Здесь про этот глюк упоминали, ответ был: Где-то можно почитать об этом поподробнее? Этот глюк имеет какое-то техническое название? Нашел такой сайт, но возможно где-то также подробно расписано, но на русском?
Это вот сразу минус 20 тыщ к ценнику от работодателя, особенно, если в проекте есть рассчеты бабла. --- Добавлено --- Подсказка - глюк работает в обе стороны. Не только в 1.000000001, но и в 0.9999999999. --- Добавлено --- Автор, для PHP есть расширение, позволяющее производить рассчеты высокой точности. Если они тебе нужны, конечно. Если Погрешность +- 0.1 не критична, можно пользоваться округлениями(не обрезаниями). Если речь идет и рассчетах бабла или каких-то важных величин, то, лучше вообще отказаться от дробей и оперировать целыми числами на уровне минимальной неделимой единицы. Хранить, грубо, не рубли, а копейки.
Мне кажется во всех букварях по программированию (по крайней мере раньше) было про это. Именно по этому сравнивать два числа с плавающей точкой не совсем корректно PHP: $floatVar1 = funct1(); // ожидаем 0.02 $floatVar2 = funct2(); // ожидаем 0.02 if ($floatVar1 == $floatVar2 echo 'yes'; правильнее вводить понятие погрешности PHP: $floatVar1 = funct1(); // ожидаем 0.02 $floatVar2 = funct2(); // ожидаем 0.02 if (abs($floatVar1-$floatVar2) < 0.01) echo 'yes';
Обычно вся цены фигурируют в decimal(10,2) или флоат. Помню даже когда 1С конфигурацию делали, вся бухгалтерия велась именно в два ноля после запятой.
Тут тоже есть подвох. Я работал с биллинговой системой: более 100 тысяч абонентов, льготы, разные коэффициенты, перерасчеты, пени - в итоге в каких либо отчетах эти копейки лезут во все щели. Т.е. тоже надо обдуманно выбирать этап когда округлять до копеек. Но тут уже от задачи зависит
@Fell-x27 я даже не разу не видел в бумагах по буху такие цифры. чтобы цены были такие ,000000000001241241241895890123
@askanim, а это не для отображения. Это чтоб какие-то отчеты сошлись глобальные. Т.е. округлишь на отдельных операциях, в итоге у тебя баланс не сойдется. А на нескольких миллионах, с сотнями тысяч записей искать пропавшую копейку еще то удовольствие.