前言:
最近在做单据打印,要求生成单据pdf文档里面的价钱金额以千分位的格式显示,在网上看了一些例子自己改写扩展了一下。
1、 DecimalFormat方式
/**
* 用DecimalFormat来实现千分位的自适应输出
*/
public String amountInThousands(String strVal) {
String strResult = "";
if (StringUtils.isNotBlank(strVal)) {
DecimalFormat df = new DecimalFormat("###,##0");
if (strVal.indexOf(".") > 0) {
switch (strVal.length() - (strVal.indexOf(".") + 1)) {
case 0:
df = new DecimalFormat("###,##0");
break;
case 1:
df = new DecimalFormat("###,##0.0");
break;
case 2:
df = new DecimalFormat("###,##0.00");
break;
case 3:
df = new DecimalFormat("###,##0.000");
break;
case 4:
df = new DecimalFormat("###,##0.0000");
break;
default:
df = new DecimalFormat("###,##0.00000");
break;
}
}
strResult = df.format(new BigDecimal(strVal));
}
return strResult;
}
2、字符串断位插入方式
/**
* 以指定字符串长度插入分隔符
*/
public String strInThousands(String strVal, char delimiter, int intrvlLen) {
String strResult = "";
if (StringUtils.isNotBlank(strVal)) {
StringBuffer sb = new StringBuffer(strVal);
int pSite = sb.lastIndexOf(".");
for (int insertSite = pSite - intrvlLen; insertSite > 0; insertSite -= intrvlLen) {
sb = sb.insert(insertSite, delimiter);
}
strResult = sb.toString();
}
return strResult;
}
3、测试
@Test
public void BigDecimalFormatOut() {
System.err.println("amountInThousands:" + amountInThousands("123123123.123"));
System.err.println("strInThousands:" + strInThousands("123123123.123", ',', 3));
}
输出结果:
amountInThousands:123,123,123.123
strInThousands:123,123,123.123