php比较两个较大的不相等的整数出现==判断出错

jackxiang 2010-1-20 15:34 | |
调试程序发现一个bug,总结就是比较相等的问题:

<?php
echo date("Y-m-d");
$a = 61563184422810820;
$b = 61563184422810816;
if($a == $b)
{
    echo "equal";
}  
else
{
    echo 'not equal';

}
?>

                                                                                                                                  
"a.php" 14L, 144C written                                                                                        
[~]# /usr/local/php/bin/php a.php
2010-01-20equal

改为:
if($a === $b)
还是相等,奇怪了!!!

回忆未来(372647693)  15:37:37
这个问题,兄弟们是咋整的。
我姓-->苏(14044522)  15:39:01
转成字符比较
我姓-->苏(14044522)  15:40:09
你这个数有17位呀!!兄弟
膘叔(19129540)  15:40:46
哈哈。
膘叔(19129540)  15:40:56
17位。还算是int吗?
回忆未来(372647693)  15:41:02
溢出吧。呵呵
膘叔(19129540)  15:41:36
这不是BUG,这分明就是错误 。
膘叔(19129540)  15:41:50
能够让你写成这样的。分明就是错误。。。
膘叔(19129540)  15:41:56
int的范围都不知道。。。
回忆未来(372647693)  15:42:28
呵呵,批评有你,php无罪,哈哈。。
我姓-->苏(14044522)  15:42:43
长整型
回忆未来(372647693)  15:43:16
要是php提示如下:
php warning:
提示:你的位数17位。还当int比较吗?兄弟!
就好了。
膘叔(19129540)  15:43:17
bigint,要额外加载库的。
我姓-->苏(14044522)  15:44:36
.........
回忆未来(372647693)  15:44:40
咋个比较呢。那
我姓-->苏(14044522)  15:44:57
转成字符串了咯
膘叔(19129540)  15:45:21
strval
回忆未来(372647693)  15:45:31
结贴。

吉祥草(81193073)  16:37:58
$a = 61563184422810820;
这个数太大了。建议你传出来的时候就是字符串。
挖掘机<meetcode@qq.com>  16:42:16
能不能这样,穿出来是字符串
挖掘机<meetcode@qq.com>  16:42:21
比较长度
挖掘机<meetcode@qq.com>  16:42:58
长度一致,取一半儿换整比较

亾玍,IFELSE(358751844)  16:46:01
谁遇到 过这个问题

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2593/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2010-1-20 16:57
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]