如何进行向上计算偶数小数值(例如,如果它是2.25,它应该舍入到2.3而不是2.2)

时间:2014-09-12 07:35:41

标签: java format double rounding

我正在尝试使用下面的代码将double值格式化为一个小数点,但它会产生两个不同的舍入值。

 double d1= 4.55;
 double d2= 17.85;
 DecimalFormat oneDForm = new DecimalFormat("#.0");
 System.out.println(oneDForm.format(d1));
 System.out.println(oneDForm.format(d2));

输出: 4.6 17.8(期待17.9)

但是我想通过计算偶数十进制17.8517.9进行综合,如何实现这一点?

2 个答案:

答案 0 :(得分:1)

要回答你的问题,

double d1= 4.55;
double d2= 17.85;
DecimalFormat oneDForm = new DecimalFormat("#.0");
oneDForm.setRoundingMode(RoundingMode.HALF_UP); //You're changing default behavior here
System.out.println(oneDForm.format(d1));
System.out.println(oneDForm.format(d2));

您预期的输出将是:4.6,17.9

据我了解,

你不能直接将17.85简化为17.9这是默认行为,而舍入的工作原理如下,对于偶数小数,它会向上舍入到最小可能的数字

示例,如果它的.05,.25,.45 ..它将舍入为.0,.2,.4,对于奇数小数,它是反向的

我相信this有助于实现这一目标。 This帖子仅仅与您的帖子相似

答案 1 :(得分:1)

pujari

DecimalFormat的默认舍入模式使用半偶数舍入

According to the document

"舍入模式转向最近邻居"除非两个邻居都是等距的,在这种情况下,朝着偶数邻居转。如果丢弃的分数左边的数字是奇数,则表现为ROUND_HALF_UP;如果它是偶数,则表现为ROUND_HALF_DOWN。请注意,这是在一系列计算中重复应用时最小化累积误差的舍入模式。 "

this was also mentioned in