我正在尝试使用下面的代码将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.85
到17.9
进行综合,如何实现这一点?
答案 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,对于奇数小数,它是反向的
答案 1 :(得分:1)
pujari
DecimalFormat的默认舍入模式使用半偶数舍入
"舍入模式转向最近邻居"除非两个邻居都是等距的,在这种情况下,朝着偶数邻居转。如果丢弃的分数左边的数字是奇数,则表现为ROUND_HALF_UP;如果它是偶数,则表现为ROUND_HALF_DOWN。请注意,这是在一系列计算中重复应用时最小化累积误差的舍入模式。 "