Возможный дубликат:
Неожиданный результат PHP от float до типа int
int ((0.1 + 0.7) * 10) = 7 на нескольких языках. Как предотвратить это?
Может кто-нибудь объяснить мне это ???
<?php echo (int) ((0.1 + 0.7)*10);//displays an output: `7` ?>
Я ожидал увидеть 8
но я получил 7
– пожалуйста, объясните это поведение.
Является ли это особенностью PHP
? Или я не понял целочисленный тип в PHP
?
Благодарю.
Этот вопрос в руководстве php :
Кроме того, рациональные числа, которые точно представлены в виде чисел с плавающей запятой в базе 10, например 0,1 или 0,7, не имеют точного представления в виде чисел с плавающей запятой в базе 2, которые используются внутри, независимо от размера мантиссы. Следовательно, они не могут быть преобразованы в их внутренние двоичные копии без небольшой потери точности. Это может привести к запутывающим результатам: например, пол ((0,1 + 0,7) * 10) обычно возвращает 7 вместо ожидаемого 8, так как внутреннее представление будет чем-то вроде 7.9999999999999991118 ….