Почему 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 только к этой операции.
Другие вопросы по тегам