Почему PHP "округляется" таким странным образом?
У меня действительно странная проблема.
По сути, я прошу, чтобы php сделал простое умножение числа с плавающей запятой, но он не работает так, как мне бы хотелось:
Я имею:
$carrier_tax = float(20)
$shipping_cost = float(48)
И я делаю:
$shipping_cost *= 1 + ($carrier_tax / 100);
Что приводит к:
$shipping_cost = float(57.599999999999994)
вместо 57,6. У меня этого никогда не было, и я не знаю, как с этим справиться.
Если бы кто-нибудь мог рассказать мне немного больше об этом, это было бы здорово.
Когда я пытаюсь округлить ($shipping_cost, 2), я получаю следующий результат: 57.600000000000001 И это на самом деле проблема.
1 ответ
- поплавки не способны точно написать 57.6. 0,6=1/5, и это бесконечная двоичная дробь.
- Если вы вернете результат округления в двойное число, у вас возникнет абсолютно такая же проблема. Итак, вам нужно округлить и перевести в строку, отсекая лишние цифры. Как показывает ваш пример, PHP готовит float только к этой операции.