1. 程式人生 > >Java 字串小數轉成千分位格式

Java 字串小數轉成千分位格式

     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();
		
		
	}