地板功能不起作用

时间:2012-05-18 23:03:45

标签: php floor

鉴于以下鳕鱼:

 $number = 1050.55;
 var_dump($number - floor($number));

为什么上面的代码会返回以下结果?

float(0.54999999999995)

在这种情况下我想要一个固定值,如0.55。你能帮帮我吗?

3 个答案:

答案 0 :(得分:3)

浮点运算不精确,其余错误很常见。 如果你知道,你想要的精确度(例如点后两位数),你可以在结果上使用round()函数。 在这种情况下,这将是:

$number = 1050.55;
var_dump(round($number - floor($number), 2));

答案 1 :(得分:2)

对于大多数浮点数,二进制只能大致代表正确的数字。规则是在一系列计算中执行最后的floor(),ceil()或fmod()。在使用它们之后,至少只进行整数数学运算。如果你将一个int转换为一个浮点数,就像你的代码一样,那么floor()就不会像你期望的那样。

打印浮动时使用printf()。它的转换程序通常做得更好,并且在截断浮动时给出你期望的答案。

编辑:或者,更确切地说,printf()在决定截断位置时对数字的十进制字符表示起作用,因此您不会得到任何奇怪的,未指定的二进制/十进制转换工件。

答案 2 :(得分:1)

this question。虽然那是关于java的,你问的是PHP的数学是一样的。