use*_*026 6 php string equality digits
出于某种原因,PHP决定:
$a = "3.14159265358979326666666666"
$b = "3.14159265358979323846264338"
Run Code Online (Sandbox Code Playgroud)
$a == $b 是真的.
为什么会这样,我该如何解决?它破坏了我的代码.
PHP将字符串(如果可能)转换为数字(源).浮点的精度有限(来源).所以,$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/>";
}
?>
Run Code Online (Sandbox Code Playgroud)
结果是
'3.14159265358979326666666666' and '3.14159265358979323846264338' are equal with ==.
'3.14159265358979326666666666' and '3.14159265358979323846264338' are NOT equal with ===.
Run Code Online (Sandbox Code Playgroud)
当你想要进行高精度数学时,你应该看看BC Math.
===您可以在相等测试中使用。
$a = "3.14159265358979326666666666";
$b = "3.14159265358979323846264338";
if($a===$b)
{
echo "ok";
}
else
{
echo "nope";
}
Run Code Online (Sandbox Code Playgroud)
此代码将回显nope.
比较==是松散比较,两个字符串都会转换为数字,而不是立即比较。
使用===将执行字符串比较,无需类型转换,并将给出所需的结果。
您可以在 PHP 手册中找到更多解释:
| 归档时间: |
|
| 查看次数: |
671 次 |
| 最近记录: |