JAVA 十进制格式舍入问题



我正在尝试使用简单的十进制格式化程序,但得到意想不到的结果:

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.034将始终舍入为61.03,因为舍入将变为最接近的整数。

HALF_UP/HALF_DOWN仅影响处于两个整数之间极限的值,即3.5将四舍五入为4HALF_UP3HALF_DOWN

您似乎正在寻找的不是舍入函数,而是上限函数,其中值将带到最接近的上方整数:61.03461.043.54,等等。

方便的是,舍入模式枚举提供了这样的功能来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

你可以在这里看到它的实际效果。

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));        

}}
我希望我能帮助你

最新更新