在 Java 中舍入负数

2022-09-02 09:14:38

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


答案 1

根据javadoc

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

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

从概念上讲,你四舍五入。换句话说,对于大于值的下一个整数,-3 大于 -3.5,而 -4 小于。


答案 2

有多种四舍五入的方法;您正在查看的那个称为对称算术舍入(如它所述)。你所指的部分指出:“这种方法通常用于数学应用,例如在会计中。这是一般在初级数学课上教授的。这似乎承认,这不是一项全球公认的规则,而只是一项最常见的规则。

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

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

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