Для одного из наших проектов необходимо было вывести изменения курсов валют по отношению ко вчерашнему дню. Вроде бы совершенно простая операция вида 0.7862-0.7863 выдавала вместо необходимого -0.0001 результат -9.9999999999989E-5. Обновление версии php на сервере никакого результата не дало. При этом на локальном сервере результат был нормальным, а на хостинге кривым. Поиск схожим проблем в интернете не нашёл. Решение оказалось совсем неожиданным. А точнее в применении простого округления round(‘-9.9999999999989E-5’,4). В результате чего я получил то что мне надо.
Еще один пример странного поведения php привел один из пользователей с форума vingrad, Pfailed
$r = 0; for ($i=0; $i $r += 0.1; } echo $r == 1 ? "1 == 1" : "1 != 1", "\n";
Выводит 1 != 1. Если у кого есть обьяснение прошу в комментарии.
_http://php.net/manual/ru/language.types.float.php
Точность чисел с плавающей точкой
Большое спасибо. Очень полезная и информативная статья. Прочитал бы ее когда столкнулся с проблемой, думаю долго не возился бы ))