给定以下代码:
$number = 1050.55;
var_dump($number - floor($number));为什么上面的代码会返回下面的结果?
float(0.54999999999995)我想要一个像0.55这样的固定值。你能帮帮我吗?
发布于 2012-05-19 07:13:34
浮点运算是不精确的,并且剩余的错误很常见。如果你知道,你想要的是什么(例如:点后两位数),则可以对结果使用round()函数。在这种情况下,这将是:
$number = 1050.55;
var_dump(round($number - floor($number), 2));发布于 2012-05-19 07:35:08
对于大多数浮点数,二进制只能近似表示正确的数字。规则是在一系列计算的最后执行floor()、ceil()或fmod()。至少在你使用它们之后只做整数运算。如果您将int类型转换为浮点型,就像在您的代码中一样,那么floor()将不会有您所期望的行为。
在打印浮点数时使用printf()。它的转换例程通常会做得更好,并在截断浮点数时给出您期望的答案。
EDIT:或者,更准确地说,printf()在决定截断位置时处理数字的十进制字符表示,这样就不会得到任何奇怪的、未指定的二进制/十进制转换工件。
发布于 2012-05-19 07:09:52
参见this question。虽然这是关于java的,而您正在询问的是PHP,但数学是相同的。
https://stackoverflow.com/questions/10660787
复制相似问题