我试图用一个简单的十进制格式化,但得到意想不到的结果:JAVA DecimalFormat的四舍五入问题
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应该是61.04'都能跟得上它不应该,'61.034'舍入到'61.03'无论你是否将'HALF_UP'四舍五入。您可能正在寻找'CEILING',其中值将被封装为下一个整数而不是四舍五入。 – Aaron
由于您正在尝试将61.034999舍入到61.04,因此您似乎希望在最大值时得到2个小数位。因此,你可以尝试围绕你的输入+ 0.001,即61.034999 + 0.001 = 61.035999,然后应该是半高达61.04 – Thomas