tg-me.com/php_interview_lib/717
Last Update:
Почему php -r «echo (int) ((0.1+0.7)*10);» выводит 7, а не 8?
В PHP выражение php -r «echo (int) ((0.1 + 0.7) * 10);»
выводит 7 вместо ожидаемого 8 из-за особенностей представления чисел с плавающей точкой в компьютерах. Числа, такие как 0.1 и 0.7, не могут быть точно представлены в двоичной системе, что приводит к небольшим погрешностям при вычислениях. В данном случае, результат выражения (0.1 + 0.7) * 10 может быть немного меньше 8, например, 7.999999999999999, и при приведении к целому типу ((int)) дробная часть отбрасывается, давая результат 7.
Рекомендуемые подходы для получения ожидаемого результата:
Округление перед приведением к целому числу:
Используйте функцию round()
для округления значения до ближайшего целого перед приведением к типу int:
echo (int) round((0.1 + 0.7) * 10); // выводит 8
Форматирование с заданной точностью:
Примените функцию
sprintf()
для форматирования числа с определённой точностью перед приведением:echo (int) sprintf('%.0f', (0.1 + 0.7) * 10); // выводит 8
Использование математических функций произвольной точности:
Для повышения точности вычислений можно использовать функции из расширения bcmath:
echo bcmul(bcadd('0.1', '0.7', 1), '10', 0); // выводит 8
BY Библиотека собеса по PHP | вопросы с собеседований
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/php_interview_lib/717