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; 

 } 

 };