-1

我目前正在使用十进制格式来获得带有 1 个十进制数据的结果。当值小于 9.94(考虑范围从 1 到 10)时,我得到的结果是可以接受的。

例如

案例 1 ---> new DecimalFormat("#.#").format(9.85) ---> 9.8(可以不舍入)

案例 2 ---> new DecimalFormat("#.#").format(9.86) ---> 9.9(好的)

案例 3 ---> new DecimalFormat("#.#").format(9.95) ---> 10(不能作为四舍五入)

案例 4 ---> new DecimalFormat("#.#").format(9.96) ---> 10(好的)

我在这里担心为什么案例 1 和案例 3 的行为方式不同。在 case 1 Decimal Format 中,9.85 的数据为 9.8 而没有四舍五入,但在 case 3 中,数据 9.95 被四舍五入并返回 10。

4

2 回答 2

2

DecimalFormat 的 Javadoc 指示默认舍入模式是 RoundingMode.HALF_EVEN,除非两个邻居是等距的,否则向“最近的邻居”四舍五入,在这种情况下,向偶数邻居舍入。

如果需要,您可以选择不同的舍入模式。

于 2021-10-12T18:04:20.890 回答
0

DecimalFormat 提供 RoundingMode 中定义的舍入模式进行格式化。

默认情况下,它使用 RoundingMode.HALF_EVEN。

舍入模式向“最近的邻居”舍入,除非两个邻居是等距的,在这种情况下,向偶数邻居舍入。

如果丢弃的分数左边的数字是奇数,则表现与 RoundingMode.HALF_UP 相同;如果是偶数,其行为与 RoundingMode.HALF_DOWN 相同。

请注意,这是一种舍入模式,当在一系列计算中重复应用时,可在统计上最小化累积误差。

它有时被称为“银行家四舍五入”,主要用于美国。

这种舍入模式类似于 Java 中用于 float 和 double 算术的舍入策略。

您可以通过以下方式设置舍入模式:

DecimalFormat decimalFormat = new DecimalFormat("#.#");
decimalFormat.setRoundingMode(RoundingMode.CEILING);

舍入模式

于 2021-10-12T18:15:24.343 回答