PHP и его странная математика
Столкнулся с очень чудесной ошибкой на PHP:
1 2 3 4 5 6 7 |
<?php $a=1.15; $b=$a*100; var_dump($b); echo $b; echo "\n"; ?> |
Что вы ожидаете увидеть в выводе? 115? А вот и нет. Если echo выведет 115, то var_dump выведет 114.99999
Что не так с float?
Тип float в языке PHP, как и его “родственник” тип double, вовсе не предназначен для точного представления десятичных дробей. Всё что мы записали в float, хранится в приближенном значении, с некоторой погрешностью.
Решение: в виду того что в PHP это считается фичей, а не багом, то для точной работы с математикой нужно использовать модуль bcmath. Ну или использовать округления до нужной точности
P.S. Не первый раз уже вспотыкаюсь об это