我正在尝试使用简单的十进制格式化程序,但得到意想不到的结果:
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
将四舍五入为4
HALF_UP
但3
HALF_DOWN
。
您似乎正在寻找的不是舍入函数,而是上限函数,其中值将带到最接近的上方整数:61.034
到61.04
,3.5
到4
,等等。
方便的是,舍入模式枚举提供了这样的功能来DecimalFormat
其RoundingMode.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));
}}
我希望我能帮助你