所以,我得到了这个:
$a = "149.45";
var_dump($a);
给出
string(6) "149.45"
现在
$b = $a * 100;
var_dump($b);
到目前为止很好:
float(14945)
现在
$i = (int)$b;
var_dump($i);
什么......?
int(14944)
在PHP 5.2.17(在CentOS上)和PHP 5.3.2-1ubuntu4.9(在ubuntu上)上测试。 谁能告诉我这是否是一个已知的bug? 任何人都可以在较新的PHP版本上测试它吗?
好的,我明白了,浮动二进制表示aproximation错误。对于我的代码,我已经使用了round()
但为什么呢?
$a = 149.45;
$b = 100 * $a;
var_dump($b)
printf('%.10f', $b);
给出
float(14945)
14945.0000000000
?为什么在解析149.45
时不解析该字符串?
答案 0 :(得分:1)
@Jon所说的内容的插图:
$a = "149.45";
$b = $a * 100;
var_dump($b);
printf("%.50f", $b);
结果
14944.99999999999818101059645414352416992187500000000000000
“14945”只是上述数字的字符串表示,而不是该数字本身。