почему 0.1 + 0.2-0.3 = 5.5511151231258E-17 в php

Возможный дубликат:
Точность вычисления PHP float

когда я выполнил код ниже в eclipse, результат был не 0, а 5.5511151231258E-17

$a = 0.1+0.2-0.3; echo $a; 

может кто-нибудь сказать мне, почему?

Это связано с тем, что числа с плавающей запятой имеют ограниченную точность .

Более подробную информацию об этом признаке можно найти на этой странице в руководстве по PHP .

Числа с плавающей запятой имеют ограниченную точность. Хотя это зависит от системы, PHP обычно использует формат двойной точности IEEE 754, который даст максимальную относительную ошибку из-за округления порядка 1.11e-16. Неэлементарные арифметические операции могут приводить к большим ошибкам, и, конечно же, необходимо прообразить ошибку, когда несколько операций усугубляются.

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

Поэтому никогда не доверяйте действию чисел с плавающим числом до последней цифры и никогда не сравнивайте числа с плавающей запятой для равенства. Если требуется более высокая точность, доступны произвольные математические функции точности и функции gmp.

Обратите внимание, что это не является особенностью, характерной для PHP; это как раз то, как работают числа с плавающей запятой .

Вы сталкиваетесь с проблемами точности с плавающей запятой PHP. Все языки имеют их, вы только что нашли PHP.

Это не относится к PHP, как говорили другие. Однако вы можете избежать ограниченной точности с плавающей запятой, используя round ():

 <?php $a = 0.1+0.3-0.2; echo round($a, 2); ?> 

Конечно, вам нужно знать количество цифр заранее.

Это потому, что компьютеры не могут точно представлять числа с плавающей запятой. Это не относится к PHP.

Подробнее см. Здесь .