地板功能不起作用


Floor function not working

给定以下编码:

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

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

float(0.54999999999995)

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

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

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

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

打印浮动时使用 printf((。 它的转换例程通常做得更好,并在截断浮点数时为您提供期望的答案。

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

看到这个问题。虽然这是关于Java的,而你问的是PHP,但数学是相同的。