java中DecimalFormat的格式化问题

/**
* 功能:将两数相除得到商
* @param:chu-除数
* @param: bei-被除数
* @param: wei-小数点后保留位数[0-4]
* @param: flag-是否转成百分数 false-否 true-是
* @return:百分数
*/
public String getPercentage(int bei, int chu, int wei, boolean flag){
String regx = "", per = "";
if(wei < 0)wei = 0;
switch(wei){
case 0:{ regx="#"; break; }
case 1:{ regx="#.0"; break; }
case 2:{ regx="#.00"; break; }
case 3:{ regx="#.000"; break; }
case 4:{ regx="#.0000"; break; }
default:{ regx="#.##"; break; }
}
if(flag)regx += "%";
DecimalFormat df = new DecimalFormat(regx);
df.setRoundingMode(RoundingMode.HALF_UP); //四舍五入
per = df.format((double)bei / (double)chu) + "";
return per;
}
public static void main(String []args){
StrDeal sd = new StrDeal();
String rex = "";
for(int wei=0; wei<6; wei++){
rex = sd.getPercentage(4, 5, wei, false);
System.out.println("【wei="+wei+"】: "+rex);
}
}
输出:
【wei=0】: 1
【wei=1】: .8
【wei=2】: .80
【wei=3】: .800
【wei=4】: .8000
【wei=5】: 0.8
我想问的是,为何[#.##]时,小数点前带0,而[#.00]却不带0,看API说#作用是:为0不显示,为1-9显示,前导0和追尾0不显示。请高手解惑。

0 的含义是 “显示数位”所在位置的数位无论值是多少,必然会被显示。
#的含义是“显示数位,0以缺失显示”Digit, zero shows as absent 不影响数值的情况下,所在位置如果为0就不显示(显示为缺失)。

可能是你的资料翻译错误。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-03
Symbol   Location   Localized   Meaning

0      Number    Yes     Digit
#      Number    Yes     Digit, zero shows as absent