为什么Java的RoundingMode HALF_UP会将-2.5四舍五入为-3?

9

RoundingMode允许程序员指定浮点数舍入的方式。尽管如此,我在其中发现了一件奇怪的事情,也许我在学校里误解了某些基本概念。

但是这个舍入模式被描述为我在学校里学到的那种,“始终四舍五入到最近的数字,当处于中心时,始终向上舍入。”,但为什么它会将-2.5舍入为-3呢?

我得出结论,它是按照绝对值向上舍入,但是对我来说,-2从-2.5“上升”显然不算。


请看这个问题:https://dev59.com/9XVC5IYBdhLWcg3whBaj - Orin MacGregor
看一下这个:http://docs.oracle.com/javase/1.5.0/docs/api/java/math/RoundingMode.html 这可能会帮助你找到你正在寻找的方法。 - Peter Rasmussen
2个回答

6

RoundingMode.UP是“远离零”的舍入模式。RoundingMode.FLOOR是向负无穷方向,而CEILING是向正无穷方向。当小数部分恰好为0.5时,HALF_UPUP保持一致。

他们必须选择一些术语来表示“远离零”。


3

该理论在RoundingMode.HALF_UP的JavaDocs中进行了概述。

四舍五入模式,向“最近邻居”舍入,除非两个邻居等距,此时向上取整。如果被舍弃的小数大于等于0.5,则行为类似于RoundingMode.UP;否则,行为类似于RoundingMode.DOWN。请注意,这是通常在学校教授的舍入模式。

关于舍入方法的Wikipedia文章提出了不同的说法:

例如,按照这个规则,值23.5会被舍入为24,而-23.5会被舍入为-23。

这是在美国小学数学课程中通常教授的两条规则之一。

尽管已经请求引用。


3
问题在于,楼主误解了RoundingMode.UP的含义是“趋向正无穷大”,而这一点目前的回答并未涉及到。因此,需要进行澄清和解释。 - Louis Wasserman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接