Добавление числа дробей дает разные результаты в PHP

Возможный дубликат:
Неожиданный результат 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 ?

Благодарю.

Solutions Collecting From Web of "Добавление числа дробей дает разные результаты в PHP"

Этот вопрос в руководстве php :

Кроме того, рациональные числа, которые точно представлены в виде чисел с плавающей запятой в базе 10, например 0,1 или 0,7, не имеют точного представления в виде чисел с плавающей запятой в базе 2, которые используются внутри, независимо от размера мантиссы. Следовательно, они не могут быть преобразованы в их внутренние двоичные копии без небольшой потери точности. Это может привести к запутывающим результатам: например, пол ((0,1 + 0,7) * 10) обычно возвращает 7 вместо ожидаемого 8, так как внутреннее представление будет чем-то вроде 7.9999999999999991118 ….