echo 65.7 * 100% 10 // 0 эхо 65,6 * 100% 10 // 9 <--- echo 6560% 10 // 0 echo 65.5 * 100% 10 // 0
Может кто-нибудь объяснить, почему?
РЕДАКТИРОВАТЬ:
для человека или не-программистов, результат 9 является ошибочным.
как я могу предотвратить эту "error"
при программировании?
Поскольку 65.6
в плавающей точке на самом деле является приблизительной 65.6
. Это на самом деле незначительно меньше 65.6
, то есть 65.5999
или аналогично.
Предполагая, что моя дикая догадка о фактическом значении верна, у вас есть 6559.9
, который 6559.9
на 6599
оператором модуля, а затем делится на 10 для остатка 9.
Потому что 65.6 * 100 – 6559.9999999999.
Это плавающие точки для вас.
Как уже говорилось, это связано с арифметикой с плавающей запятой. Я рекомендую прочитать « Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой» .
Потому как:
<?php echo (65.7 * 100 == 6570) ? "Equal" : "Not equal"; // Equal echo (65.6 * 100 == 6560) ? "Equal" : "Not equal"; // NOT EQUAL !! echo (65.5 * 100 == 6550) ? "Equal" : "Not equal"; // Equal ?>
65.6 * 100 НЕ 6560. Большой красный предупреждающий блок объясняет, почему.