喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 帮助

RSS 订阅当前论坛  

喜悦证交所已经关闭

上一主题 下一主题
     
标题: [经验] PHP的重大BUG,大家编程要小心了  
 
liyaping
注册会员
Rank: 2



UID 73907
精华 0
积分 98
帖子 97
金钱 98 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-5-24
状态 离线
[广告]: q m
PHP的重大BUG,大家编程要小心了

浮点数转换会有bug,误差居然会出现个位数差异

<?

$m=117113+193405.46;
var_dump($m);
$m=$m*100;
var_dump($m);
$mz=(int)$m;
var_dump($mz);

?>
执行结果:
float(310518.46) float(31051846) int(31051845)


测试环境:redhat as5    PHP Version 5.2.1

[ 本帖最后由 liyaping 于 2008-3-26 04:48 PM 编辑 ]
2008-3-26 04:47 PM#1
查看资料  发短消息  顶部
 
kuye3131
新手上路
Rank: 1



UID 91473
精华 0
积分 35
帖子 42
金钱 35 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2007-4-16
状态 离线
[推荐阅读] 广东电信100M独享,浙江电信百M独享带宽QQ445676667
$mz=(int)$m;
2008-3-26 05:40 PM#2
查看资料  发短消息  QQ  顶部
 
flyinghail (flyinghail)
新手上路
Rank: 1
初级会员



UID 67914
精华 0
积分 0
帖子 2
金钱 0 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-1-10
状态 离线
[推荐阅读] 千W级数据反馈处理,大家都有什么好设计思路吗?
这个在手册中就提醒了,对于浮点数类型你看到的数字和实际php内的数字是不同的
例如官方手册中的例子0.1+0.7,如果intval出来结果就是0.7
(0.1 + 0.7) == 0.8的结果false
所以php用浮点数计算要小心

如果要转换成整数可以先用number_format或者转换成字符串再转换成整数
2008-3-26 11:19 PM#3
查看资料  访问主页  发短消息  顶部
 
敌敌畏
中级会员
Rank: 3Rank: 3
中级会员



UID 64542
精华 0
积分 274
帖子 272
金钱 274 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2005-6-3
来自 $河南->郑州
状态 离线
[推荐阅读] 招兼职网站美工
PHP有高精度运算的函数库,
2008-3-27 08:52 AM#4
查看资料  发短消息  QQ  顶部
 
liyaping
注册会员
Rank: 2



UID 73907
精华 0
积分 98
帖子 97
金钱 98 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-5-24
状态 离线
[推荐阅读] 远程包含文件错误,请帮我看一下怎么解决


QUOTE:
原帖由 flyinghail 于 2008-3-26 11:19 PM 发表
这个在手册中就提醒了,对于浮点数类型你看到的数字和实际php内的数字是不同的
例如官方手册中的例子0.1+0.7,如果intval出来结果就是0.7
(0.1 + 0.7) == 0.8的结果false
所以php用浮点数计算要小心


如果要 ...
这点是知道的,所有语言对于浮点数的比较应该是 a-b<最小精度  方式比较,
但是作为一个强制类型转换而不是取整函数,应该判断一下最小精度,否则就会引起歧义,为什么转成字符串再转成int就可以了

[ 本帖最后由 liyaping 于 2008-3-27 09:45 AM 编辑 ]
2008-3-27 09:43 AM#5
查看资料  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.024525 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP