页:
[1]
| liyaping | 2008-3-26 08:47 AM |
|
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
[[i] 本帖最后由 liyaping 于 2008-3-26 04:48 PM 编辑 [/i]] |
| kuye3131 | 2008-3-26 09:40 AM |
|
| $mz=(int)$m; |
| flyinghail | 2008-3-26 03:19 PM |
|
这个在手册中就提醒了,对于浮点数类型你看到的数字和实际php内的数字是不同的
例如官方手册中的例子0.1+0.7,如果intval出来结果就是0.7
(0.1 + 0.7) == 0.8的结果false
所以php用浮点数计算要小心
如果要转换成整数可以先用number_format或者转换成字符串再转换成整数 |
| liyaping | 2008-3-27 01:43 AM |
|
[quote]原帖由 [i]flyinghail[/i] 于 2008-3-26 11:19 PM 发表
这个在手册中就提醒了,对于浮点数类型你看到的数字和实际php内的数字是不同的
例如官方手册中的例子0.1+0.7,如果intval出来结果就是0.7
(0.1 + 0.7) == 0.8的结果false
所以php用浮点数计算要小心
如果要 ... [/quote]
这点是知道的,所有语言对于浮点数的比较应该是 a-b<最小精度 方式比较,
但是作为一个强制类型转换而不是取整函数,应该判断一下最小精度,否则就会引起歧义,为什么转成字符串再转成int就可以了
[[i] 本帖最后由 liyaping 于 2008-3-27 09:45 AM 编辑 [/i]] |
Powered by Discuz! Archiver 6.1.0
© 2001-2006 Comsenz Inc.
Processed in 0.005894 second(s), 2 queries |