出于某种原因,PHP决定是否:
$a = "3.14159265358979326666666666"
$b = "3.14159265358979323846264338"
$a == $b
为真。
为什么这样做,我该如何解决?
破坏了我的代码。
PHP将字符串(如果可能)转换为数字(source)。浮点精度有限(source)。因此,$a == $b
由于四舍五入的误差。
使用===
或!==
。
<?php
$a = "3.14159265358979326666666666";
$b = "3.14159265358979323846264338";
if ($a == $b) {
echo "'$a' and '$b' are equal with ==.<br/>";
} else {
echo "'$a' and '$b' are NOT equal with ==.<br/>";
}
if ($a === $b) {
echo "'$a' and '$b' are equal with ===.<br/>";
} else {
echo "'$a' and '$b' are NOT equal with ===.<br/>";
}
?>
结果]
'3.14159265358979326666666666' and '3.14159265358979323846264338' are equal with ==. '3.14159265358979326666666666' and '3.14159265358979323846264338' are NOT equal with ===.
注意
当您想进行高精度数学运算时,应该看一下BC Math。
您可以在相等性测试中使用===
。
尝试使用$a === $b
代替;您绝对不要使用==
进行字符串比较。
如果您将数字与字符串进行比较,或者比较涉及数字字符串,然后将每个字符串转换为数字,然后将数值比较。这些规则也适用于交换机声明。比较时不进行类型转换是===或!==,因为这涉及比较类型以及值。
您不应该这样比较float变量。
尝试一下: