java中对于字符串(正负数字)进行展示的时候,展示成千分位格式和保留小数位。
解决的方法有两种,一种是后台java进行处理,另一种是前台js处理。
第1种方法:工具类(只适合不带正负号的数字的字符串),此方法是保留两位小数位,整数位是千分位格式
//千分位方法
public static String fmtMicrometer(String text)
{
DecimalFormat df = null;
if(text.indexOf(".") > 0)
{
if(text.length() - text.indexOf(".")-1 == 0)
{
df = new DecimalFormat("###,##0.");
}else if(text.length() - text.indexOf(".")-1 == 1)
{
df = new DecimalFormat("###,##0.0");
}else
{
df = new DecimalFormat("###,##0.00");
}
}else
{
df = new DecimalFormat("###,##0");
}
double number = 0.0;
try {
number = Double.parseDouble(text);
} catch (Exception e) {
number = 0.0;
}
return df.format(number);
}
如果带正负号如
String s = -38475000.9098
if(s.startsWith("-")){
String s=this.fmtMicrometer(strResults.substring(1, strResults.length()));
System.out.println(s);
}
//得到的结果就是-38,475,000.90
第2种方法:前台js处理
可能会稍微复杂点,因为他没有专门的类对其进行处理,全靠硬拼。我这边有easyui页面展示时对数据的处理方法,大家可以借鉴,也可以剥离出来。我这边就不整理了(我比较讨厌前台处理)。
function formatDiff(s, rowData, rowIndex){
//n = n>0 && n<=20 ? n : 2;
var n=2;
s = parseFloat((s+"").replace(/[^\d\.-]/g,"")).toFixed(n)+"";
var l = s.split(".")[0].split("").reverse(),
r = s.split(".")[1];
t = "";
for(i = 0;i<l.length;i++){
t+=l[i]+((i+1)%3==0 && (i+1) != l.length ? "," : "");
}
var v= t.split("").reverse().join("")+"."+r;
if(v.match("-,")){
return v.replace("-,","-");
}else{
return v;
}
};