十进制格式在java中没有给出适当的结果



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

例如

Case 1——>新DecimalFormat("#。#").format(9.85)——比;9.8(不舍入)

Case 2——>新DecimalFormat("#。#").format(9.86)——比;9.9(好的)

Case 3——>新DecimalFormat("#。#").format(9.95)——比;10(Not Okay as舍入)

Case 4——>新DecimalFormat("#。#").format(9.96)——比;10(好的)

我有一个问题,为什么情况1 &情况3没有类似的行为。在第1种情况下,十进制格式给出的数据为9.8,9.85没有四舍五入,但在第3种情况下,9.95的数据得到四舍五入&返回10。

Javadoc of DecimalFormat表示默认的舍入模式为RoundingMode.HALF_EVEN,它向"最近邻"靠拢;除非两个邻居是等距的,在这种情况下,向偶数邻居圆。

您可以根据需要选择不同的舍入模式。

DecimalFormat提供了RoundingMode中定义的舍入模式,用于格式化。

默认使用RoundingMode.HALF_EVEN.

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

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

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

有时被称为"银行家四舍五入",主要在美国使用。

此舍入模式类似于Java中浮点数和双精度算术所使用的舍入策略。

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

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

RoundingMode