Telegram Group & Telegram Channel
Почему 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



tg-me.com/php_interview_lib/717
Create:
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

View MORE
Open in Telegram


telegram Telegram | DID YOU KNOW?

Date: |

China’s stock markets are some of the largest in the world, with total market capitalization reaching RMB 79 trillion (US$12.2 trillion) in 2020. China’s stock markets are seen as a crucial tool for driving economic growth, in particular for financing the country’s rapidly growing high-tech sectors.Although traditionally closed off to overseas investors, China’s financial markets have gradually been loosening restrictions over the past couple of decades. At the same time, reforms have sought to make it easier for Chinese companies to list on onshore stock exchanges, and new programs have been launched in attempts to lure some of China’s most coveted overseas-listed companies back to the country.

The STAR Market, as is implied by the name, is heavily geared toward smaller innovative tech companies, in particular those engaged in strategically important fields, such as biopharmaceuticals, 5G technology, semiconductors, and new energy. The STAR Market currently has 340 listed securities. The STAR Market is seen as important for China’s high-tech and emerging industries, providing a space for smaller companies to raise capital in China. This is especially significant for technology companies that may be viewed with suspicion on overseas stock exchanges.

telegram from no


Telegram Библиотека собеса по PHP | вопросы с собеседований
FROM USA