Java 字串小數轉成千分位格式
阿新 • • 發佈:2019-02-20
java中需要將字串小數轉成千分位格式顯示,如下程式碼,原理是使用正則表示式對整數位進行千分位格式化,然後小數位拼接起來.為什麼要這麼麻煩的處理,是因為在android程式中使用的NumberFormat,本來是可以做千分位的處理的,但是發現有進位的問題,目前還沒找到原因,折中處理.:參考連結:http://www.jb51.net/article/48955.htm
package main; import java.math.RoundingMode; import java.text.NumberFormat; /** * 實現將小數型別字串轉成千分位格式的正則表示式 * * @author Administrator * */ public class Ceshi { public static void main(String[] args) { // 06-07 15:38:17.461: I/System.out(25307): // 轉換前money1.000007343200637E13轉換後10,000,073,432,006.40 System.out.println(returnDouble(1.000007343200637E13)); String[] strSS = "10000073432006.37".split("\\."); String string = strSS[0].replaceAll("(?<=\\d)(?=(?:\\d{3})+$)", ","); System.out.println(string + "." + strSS[1]); } // 這個方式在android裡面會有10,000,073,432,006.37會進位變成10,000,073,432,006.40,在myeclipse執行是正常的問題,希望大神解決 public static String returnDouble(double df) { NumberFormat numberFormat = NumberFormat.getInstance(); numberFormat.setRoundingMode(RoundingMode.HALF_UP); numberFormat.setMaximumFractionDigits(2); numberFormat.setMinimumFractionDigits(2); numberFormat.setGroupingUsed(true); return numberFormat.format(df); } }
android中的程式碼:
//將科學技術法表示的double型別轉成千分位顯示 public static String formatMoney(double money, String currency) { //註釋的這個方式,是有進位問題的,目前還不知道原因 // BasicCurrency basicCur = APIDoc.getSystemDocCaptain().getBasicCurrency(currency); // // return roundMarginByScale(money, basicCur.getDigit()) + ""; // NumberFormat numberFormat = (NumberFormat) moneyFormatHashMap.get(currency); // if (numberFormat == null) { // numberFormat = NumberFormat.getInstance(); // BasicCurrency basicCur = APIDoc.getSystemDocCaptain().getBasicCurrency(currency); // // if (basicCur == null) { // return "Err"; // } // numberFormat.setRoundingMode(RoundingMode.HALF_UP); // numberFormat.setMaximumFractionDigits(basicCur.getDigit()); // numberFormat.setMinimumFractionDigits(basicCur.getDigit()); // numberFormat.setGroupingUsed(true);//設定為true,可以轉成千分位 // moneyFormatHashMap.put(currency, numberFormat); // } // synchronized (numberFormat) { // System.out.println("轉換前money" + money + "轉換後" + numberFormat.format(money)); // return numberFormat.format(money); // } //DecimalFormat format = new DecimalFormat("#,##0.00");//不以科學計數法顯示,並把結果用逗號隔開保留兩位小數 BigDecimal bigDecimal = new BigDecimal(money);//不以科學計數法顯示,正常顯示保留兩位小數 BasicCurrency basicCur = APIDoc.getSystemDocCaptain().getBasicCurrency(currency); if (basicCur == null) { return "Err"; } return bigDecimal.setScale(basicCur.getDigit(), BigDecimal.ROUND_HALF_UP).toPlainString(); }