【发布时间】:2017-05-22 13:42:56
【问题描述】:
我正在尝试使用简单的十进制格式化程序,但得到了意想不到的结果:
float amt = 61.0349998474121F;
float amt1 = 4.5850000381470F;
DecimalFormat m_numberFormat2DP = new DecimalFormat("0.000");
System.out.println(m_numberFormat2DP.getRoundingMode());
System.out.println(m_numberFormat2DP.format(amt));
System.out.println(m_numberFormat2DP.format(amt1));
DecimalFormat m_numberFormat2DP1 = new DecimalFormat("0.00");
//m_numberFormat2DP1.setRoundingMode(RoundingMode.HALF_UP);
System.out.println(m_numberFormat2DP1.getRoundingMode());
System.out.println(m_numberFormat2DP1.format(amt));//result should be 61.04
System.out.println(m_numberFormat2DP1.format(amt1));//result should be 4.59
这也是我尝试过的代码 half_up,但结果与我收到的最后一个 SOP 的输出相同,即 61.03 和 4.59。 61.03 应该是 61.04
【问题讨论】:
-
61.03 和 4.59 对我来说似乎是正确的
-
61.03 should be 61.04不应该,61.034舍入到61.03,无论你是否舍入HALF_UP。您可能正在寻找CEILING,其中的值将被限制为下一个整数而不是四舍五入。 -
由于您尝试将 61.034999 舍入为 61.04,因此您似乎希望最多获得 2 个小数位数。因此,您可以尝试将输入 + 0.001 舍入,即 61.034999 + 0.001 = 61.035999,然后应该将一半舍入到 61.04
-
为什么 61.03 根据四舍五入看起来我是正确的
-
@XtremeBaumer 看起来我们没有正确的舍入定义。多次四舍五入会导致错误。 0.49999
标签: java decimalformat