Почему 65.6 * 100% 10 равно 9, вместо 0 в PHP?

  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. Большой красный предупреждающий блок объясняет, почему.