有个问题求大神解释

Amos_ 2014-01-20 11:39:31
下面的代码运行结果是TRUE,求解释!!!

$a = '9900000020000004';
$b = array('2809083640000001','9900000020000002','9900000020000003');
$result = in_array($a, $b);
var_dump($result);



...全文
228 点赞 收藏 12
写回复
12 条回复
黄袍披身 2014年01月27日
5.5.6 发来贺电 false.
回复 点赞
鱼为情 2014年01月27日
#10 var_dump(9900000020000004); var_dump(9900000020000002); var_dump(9900000020000003); 这三个打印出来的确实都是:float(9.90000002E+15) 但是我打印$a = '9900000020000004'; $b = array('2809083640000001','9900000020000002','9900000020000003'); $result = in_array($a, $b); var_dump($result); 结果是 bool(false); php 5.4测试。
回复 点赞
傲雪星枫 2014年01月21日
$a = '9900000020000004'; $b = array('2809083640000001','9900000020000002','9900000020000003'); 在PHP里当两个数字型字符串(只含数字的字符串)进行比较的时候是直接转换成数值进行比较的。 因$a 与 $b内元素都可以转换为数字,因此php会对字符串转成数字再进行比较,因为整型范围会溢出,因此会转换成浮点型(float) var_dump(9900000020000004); var_dump(9900000020000002); var_dump(9900000020000003); 9900000020000004 与 9900000020000002,9900000020000003 的浮点数相同, 都是float(9.90000002E+15) 因此in_array返回true。 如果不想php转换类型比较,用in_array($a, $b, true);可解决此问题。
回复 点赞
xuzuning 2014年01月20日
$result = in_array($a, $b, true);
回复 点赞
KazJ 2014年01月20日
PHP Version 5.3.10 结果是true
回复 点赞
xuzuning 2014年01月20日

你的php版本是多少?
回复 点赞
迷茫乱 2014年01月20日
表示不知道这个是怎么回事
回复 点赞
嘻哈大咖秀 2014年01月20日
引用 5 楼 xuzuning 的回复:
php 5.4.20
貌似5.3的都不行
回复 点赞
blizzf99 2014年01月20日
整型溢出~~
回复 点赞
Amos_ 2014年01月20日
引用 1 楼 xuzuning 的回复:
你的php版本是多少?
我的php版本是 5.3.10
回复 点赞
xuzuning 2014年01月20日
php 5.4.20
回复 点赞
嘻哈大咖秀 2014年01月20日
引用 1 楼 xuzuning 的回复:
你的php版本是多少?
版主的php版本是多少
回复 点赞
发动态
发帖子
基础编程
创建于2007-09-28

9735

社区成员

14.0w+

社区内容

从PHP安装配置,PHP入门,PHP基础到PHP应用
社区公告
暂无公告