2017-05-22 100 views
-1

我试图用一个简单的十进制格式化,但得到意想不到的结果: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

+0

61.03和4.59似乎是正确的我 –

+3

'61.03应该是61.04'都能跟得上它不应该,'61.034'舍入到'61.03'无论你是否将'HALF_UP'四舍五入。您可能正在寻找'CEILING',其中值将被封装为下一个整数而不是四舍五入。 – Aaron

+0

由于您正在尝试将61.034999舍入到61.04,因此您似乎希望在最大值时得到2个小数位。因此,你可以尝试围绕你的输入+ 0.001,即61.034999 + 0.001 = 61.035999,然后应该是半高达61.04 – Thomas

回答

0

61.034将总是四舍五入为61.03,因为舍入带来了最接近的整数。

HALF_UP/HALF_DOWN仅冲击值是在两个整数之间的界限,即3.5将被舍入到4HALF_UP而是3HALF_DOWN

你似乎在寻找的不是一个舍入函数,而是上限函数,其中值将被带到最近的上述整数:61.03461.043.54

便利中,RoundingMode枚举提供了这样的功能,DecimalFormatRoundingMode.CEILING领域:

DecimalFormat m_numberFormat2DP1 = new DecimalFormat("0.00"); 
m_numberFormat2DP1.setRoundingMode(RoundingMode.CEILING); 
System.out.println(m_numberFormat2DP1.getRoundingMode()); 
System.out.println(m_numberFormat2DP1.format(amt));//result is 61.04 
System.out.println(m_numberFormat2DP1.format(amt1));//result is 4.59 

你可以看到它在行动here

0
public class DecimalFormatDemo { 
public static void main(String args[]) { 
DecimalFormat df1 = new DecimalFormat("###,###.0000"); 
System.out.println(df1.format(111111123456.12)); 

Locale.setDefault(Locale.US); 
DecimalFormat df2= new DecimalFormat("###,###.0000"); 
System.out.println(df2.format(111111123456.12)); 

DecimalFormat df3= new DecimalFormat(); 
myformat3.applyPattern("##,###.000"); 
System.out.println(df3.format(11112345.12345)); 




    DecimalFormat df4= new DecimalFormat(); 
    myformat4.applyPattern("0.000E0000"); 
    System.out.println(df4.format(10000)); 
    System.out.println(df4.format(12345678.345)); 


    DecimalFormat df5= null; 
    try{ 
    df5= (DecimalFormat)NumberFormat.getPercentInstance(); 
}catch(ClassCastException e){ 
    <span style="white-space:pre"> </span> System.err.println(e); 
} 
df5.applyPattern("00.0000%"); 
System.out.println(df5.format(0.34567)); 
System.out.println(df5.format(1.34567));   

}
} 我希望我可以帮你