首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Floor功能不工作

Floor功能不工作
EN

Stack Overflow用户
提问于 2012-05-19 07:03:45
回答 3查看 1.3K关注 0票数 0

给定以下代码:

代码语言:javascript
复制
 $number = 1050.55;
 var_dump($number - floor($number));

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

代码语言:javascript
复制
float(0.54999999999995)

我想要一个像0.55这样的固定值。你能帮帮我吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-19 07:13:34

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

代码语言:javascript
复制
$number = 1050.55;
var_dump(round($number - floor($number), 2));
票数 3
EN

Stack Overflow用户

发布于 2012-05-19 07:35:08

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2012-05-19 07:09:52

参见this question。虽然这是关于java的,而您正在询问的是PHP,但数学是相同的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10660787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档