我正在尝试使用简单的十进制格式化程序,但会得到意想不到的结果:
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 :(得分:0)
61.034
将始终四舍五入为61.03
,因为舍入会带来最接近的整数。
HALF_UP
/ HALF_DOWN
仅影响两个整数之间的限制值,即3.5
将使用4
四舍五入为HALF_UP
,但为{ {1}} 3
。
你似乎在寻找的不是舍入函数,而是一个上限函数,其值将被带到最接近的整数:HALF_DOWN
到61.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));
}
} 我希望我可以帮助你