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

有帮助吗?

解决方案

根据 javadoc

  

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

     

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

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

其他提示

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

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

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

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

为了它的价值, java.math.BigDecimal 如果您需要对这类事物进行更多控制,则可以选择舍入模式。

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

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

据Javadocs说:

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top