JAVA DecimalFormat舍入问题

时间:2017-05-22 13:42:57

标签: 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

2 个答案:

答案 0 :(得分:0)

61.034将始终四舍五入为61.03,因为舍入会带来最接近的整数。

HALF_UP / HALF_DOWN仅影响两个整数之间的限制值,即3.5将使用4四舍五入为HALF_UP,但为{ {1}} 3

你似乎在寻找的不是舍入函数,而是一个上限函数,其值将被带到最接近的整数:HALF_DOWN61.034,{{1} } 61.04等等。

方便地,RoundingMode枚举为3.5 4字段提供了此类功能:

DecimalFormat

您可以在行动here中看到它。

答案 1 :(得分: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));        

}
} 我希望我可以帮助你