我在比较php中的这两个值并不相等,但是在比较它时显示的是相等的。如果php不工作?
<?php
if(2012111809055570004==2012111809055570002)
echo "aa";
else
echo "n";
?>
O/P - AA
我不知道为什么?
我在比较php中的这两个值并不相等,但是在比较它时显示的是相等的。如果php不工作?
<?php
if(2012111809055570004==2012111809055570002)
echo "aa";
else
echo "n";
?>
O/P - AA
我不知道为什么?
我的猜测是他们都不在int范围内,所以他们会被转换为float,他们靠近并表明他们是平等的。
这些数字太大而不能作为整数处理,因此它们被视为浮点数,并且它们太靠近以便进行浮点比较以区分差异。
所以如何做比较 – Shreya 2013-03-06 20:31:18
看起来你想比较日期和时间。尝试使用DateTime类(http://php.net/manual/en/class.datetime.php)。 – user1618143 2013-03-06 20:33:57
不我不是比较日期 – Shreya 2013-03-06 20:39:22
你的整数变成科学记数法中的浮点数(即2.012111809055570004e18)。
检查这个问题的帮助:How to compare large number in PHP?
C:\Users\Kolink>php -r "var_dump(2012111809055570004);" float(2.0121118090556E+18)
如图所示,PHP不能存储数字,在大的整数格式,而且必须诉诸浮点数。因此,单元级精度是不可能的,你会得到像这样的不寻常的比较。
修复将涉及使用字符串来保存号码,或使用大号码扩展名,如BCMath。
你可以给我的代码比较 – Shreya 2013-03-06 20:39:59
那么第一个选项只是你已经有的代码,但用数字引号。我从来没有用过BCMath,但我只知道这一点,所以我无法帮助第二个人。 – 2013-03-06 20:41:10
该数字太大,不能视为整数。因此,这将比较浮点值。浮动值得到较大值但不能得到最后两个数字。所以这个条件是真的。
我得到了我的答案我用===而不是==现在它的工作。
您使用的是32位还是64位系统? – datasage 2013-03-06 20:27:18
'echo gettype(2012111809055570004);' – 2013-03-06 20:28:00
大数字通常表示为浮点数,这本质上是不精确的。请参见[PHP数学精确](http://stackoverflow.com/questions/3726721/php-math-precision) – mario 2013-03-06 20:28:29