舍入Java中的负数

时间:2008-11-06 18:18:32

标签: java rounding

根据Wikipedia舍入负数时,您可以舍入绝对数。因此,通过这种推理,-3.5将四舍五入为-4。但是当我使用java.lang.Math.round(-3.5)返回-3时。有人可以解释一下吗?

6 个答案:

答案 0 :(得分:16)

根据javadoc

  

返回最接近的长度   论点。结果四舍五入到   整数加1/2,取   地板的结果,并铸造   结果输入长。换一种说法,   结果等于的值   表达式:

     

(long)Math.floor(a + 0.5d)

从概念上讲,你围绕向上。换句话说,下一个整数大于比值大,-3大于-3.5,而-4小于。

答案 1 :(得分:8)

有多种舍入方法;你正在看的那个称为对称算术舍入(正如它所述)。您所指的部分指出:“这种方法通常用于数学应用,例如会计。它通常在小学数学课程中教授。”这似乎承认,这不是全球商定的规则,而是最常见的规则。

就个人而言,我不记得在学校里曾经被教过这种规则。我对舍入的理解一直是.5被舍入,无论数字的符号如何。显然,Java的作者有相同的理解。这是非对称算术舍入。

不同的工具和语言可能使用不同的舍入方案。 Excel显然使用对称方法。

(总的来说,我建议如果你发现维基百科与经验之间存在冲突,你可以在别处寻找信息。维基百科并不完美。)

答案 2 :(得分:5)

对于它的价值,java.math.BigDecimal如果你需要更多控制那种东西,它有可选的舍入模式。

答案 3 :(得分:4)

你引用的维基百科文章并没有说这是唯一的回合方式,只是常见的回合方式。在那篇文章中还提到了几个替代方案(遗憾的是,它们都没有描述Java的舍入方法 - 即使它们在指示JavaScript的作用时将其称为“非对称算术舍入”)。

您需要决定如何想要您的数字四舍五入,然后使用该方法。如果Java的实现与那个匹配,那就太好了。否则你需要自己实现它。

答案 4 :(得分:2)

据Javadocs说:

返回与参数最接近的long。通过添加1/2将结果舍入为整数,取结果的最低值,并将结果转换为类型long。换句话说,结果等于表达式的值:      

(long)Math.floor(a + 0.5d)

答案 5 :(得分:0)

事实证明,惯例是围捕。我猜维基百科是错误的。事实证明,微软错了,因为他们把它四舍五入到了-4,这不是惯例(我和那些拥有数学博士学位的人一起检查过)。