округление — PHP функция раунда вернула странный результат

Я просто выполняю простой скрипт round(8.32, 1) в CGI возвращается 8.300000000000001. Но когда я выполняю это в CLI с php -r "echo round(8.32, 1);", результат 8,3, который я ожидал. Моя версия PHP 5.6.2.

1

Решение

У вас есть разные настройки точность в вашем конфиге.

ini_set('precision', 10); var_dump(round(8.32, 1)); // double(8.3)

ini_set('precision', 20); var_dump(round(8.32, 1)); // double(8.3000000000000007105)

Почему это происходит, вы можете прочитать здесь: http://en.wikipedia.org/wiki/IEEE_floating_point

2

Другие решения

round() возвращает float, который является приблизительным, и в зависимости от того, как вы отображаете, может отображаться ошибка округления.

Вы должны использовать number_format(), который возвращает строку.

echo number_format(8.32, 1);
0

По вопросам рекламы [email protected]