PHP字符串浮动bug?

时间:2011-09-30 16:08:57

标签: php

所以,我得到了这个:

$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时不解析该字符串?

1 个答案:

答案 0 :(得分:1)

@Jon所说的内容的插图:

$a = "149.45";
$b = $a * 100;
var_dump($b);
printf("%.50f", $b);

结果

14944.99999999999818101059645414352416992187500000000000000

“14945”只是上述数字的字符串表示,而不是该数字本身。