有人可以帮我弄清楚为什么这个最基本的代码在 PHP 中不起作用吗?多年来一直使用 PHP,但从未见过这种情况......因为我在 sandbox.onlinephpfunctions.com 网站上对其进行了测试,所以它在每个版本的 php 上都是一致的,请参见代码片段下方的链接。我想做的就是将一个数字与另一个数字进行比较,但是当数字包含浮点数时,事情会变得很奇怪。<?php$lside = 490.84;$rside = 237.80 + 222.00 + 31.04;if( $lside == $rside ){ echo "they are equal\n";} else { echo "not equal\n"; echo "rside: [$rside]\n"; echo "lside: [$lside]\n";}http://sandbox.onlinephpfunctions.com/code/6dee3a97f68a11e67fbaa8e5c157b827ecd47740帮助和感谢!编辑:这是我最终从收到的答案中解决此问题并进一步研究的方法:<?php$lside = 490.84;$rside = 237.80 + 222.00 + 31.04;if( (string)$lside == (string)$rside ){ echo "they are equal\n";} else { echo "not equal\n"; echo "rside: [$rside]\n"; echo "lside: [$lside]\n";}因此,要在 PHP 中比较两个数字,一种安全的方法是强制它们成为字符串……看图。我进行了一些额外的测试,以确保这是真的并且似乎总是有效。所有这些都返回“好”:if( "1" == "1" ) echo "1 - good\n";if( "1.0" == "1" ) echo "2 - good\n";if( "1" == "1.0" ) echo "3 - good\n";if( "1.0" == "1.0" ) echo "4 - good\n";if( "1.0" == "1.00000000" ) echo "5 - good\n";if( "1.000000000000000" == "1.00000000" ) echo "6 - good\n";if( "2" == (string)(.5+.5+1) ) echo "7 - good\n";if( "2.000000000000000" == (string)(1+1) ) echo "8 - good\n";if( "2.000000000000000" == (string)(1.0+1) ) echo "9 - good\n";if( "2.4" == (string)(1.4+1) ) echo "10 - good\n";if( "2.40000" == (string)(1.4+1) ) echo "11 - good\n";if( "2.000000000000000" == (string)(.5+.5+1) ) echo "12 - good\n";if( "1.5" == (string)(.5+.5+.5) ) echo "13 - good\n";if( "1.500000000000000" == (string)(.5+.5+.5) ) echo "14 - good\n";
2 回答
慕容3067478
TA贡献1773条经验 获得超3个赞
你可以试试这个:
if( bccomp($lside, $rside, 2) == 0 ){
echo "they are equal\n";
} else {
echo "not equal\n";
echo "rside: [$rside]\n";
echo "lside: [$lside]\n";
}
因为比较float的时候有一个复杂的东西,你可以在这里阅读更多,对于bccomp函数你可以在这里阅读更多
动漫人物
TA贡献1815条经验 获得超10个赞
尝试这个
$lside = 490.84;
$rside = 237.80 + 31.04 + 222;
$newRside = number_format($rside,2);
if( $lside == $newRside ){
echo "they are equal\n";
} else {
echo "not equal\n";
echo "rside: [$rside]\n";
echo "lside: [$lside]\n";
}
- 2 回答
- 0 关注
- 115 浏览
添加回答
举报
0/150
提交
取消
