有時候我們必需將數字加上每三個位數加上一個逗號,例如20000變成20,000,目的在於方便財務上閱讀。所以我整理了下列出幾種解決的方法

第一個方法用javascript寫一個數字格式化函式

// 於 2015-04-23 修正
function formatNumber(str, glue) {
    // 如果傳入必需為數字型參數,不然就噴 isNaN 回去
    if(isNaN(str)) {
        return NaN;
    }
	// 決定三個位數的分隔符號
    var glue= (typeof glue== 'string') ? glue: ',';
    var digits = str.toString().split('.'); // 先分左邊跟小數點
 
    var integerDigits = digits[0].split(""); // 獎整數的部分切割成陣列
    var threeDigits = []; // 用來存放3個位數的陣列
 
    // 當數字足夠,從後面取出三個位數,轉成字串塞回 threeDigits
    while (integerDigits.length > 3) {
        threeDigits.unshift(integerDigits.splice(integerDigits.length - 3, 3).join(""));
    }
 
    threeDigits.unshift(integerDigits.join(""));
    digits[0] = threeDigits.join(glue);
 
    return digits.join(".");
 
}

//測試函式(注意數字要以字串輸入)
var money = formatNumber('1234567890');
alert(money);
//輸出結果為:1,234,567,890
var money = formatNumber('1234567890.321','`');
//輸出結果為:1`234`567`890.321

當然在PHP,你有更快速的方法:

//測試函式參數說明
// 1) 欲轉換的數字
// 2) 小數位數
// 3) 小數點的顯示字元
// 4) 三位數的顯示字元
$number = 1234567890.321;
echo number_format($number, 2, '.' ,',');//輸出結果為:1,234,567,890.32
echo number_format($number, 1, '*' ,'#');//輸出結果為:1#234#567#890*3

詳細的用法參考:number_format() ,甚至更進階的函式可參考:money_format()

另外一種方法是在執行SQL查詢時,就先將數字進行轉換動作

--假設表單salary(薪水)有一個名稱為money(錢)的欄位
SELECT FORMAT(money, 4) FROM salary;

--輸出結果將會把money的數字資料態轉為xx,xxx,xxx格式,以下為範圍輸出

SELECT FORMAT(12332.123456, 4);
--輸出結果為:12,332.1235

SELECT FORMAT(12332.2,0)
--輸出結果為:12,332

SELECT FORMAT(12332.1,4)
--輸出結果為:12,332.1000

詳細的用法請參考:MySQL中文參考手冊【7.4.12其他函數】

低溫烘培 發表在 痞客邦 PIXNET 留言(2) 人氣()


留言列表 (2)

發表留言
  • 訪客
  • 你的 PHP 版本 , 應該沒有測試過吧!
    跑出來的結果 ,並非那樣 = =
  • Sorry, 真的沒特別去測試它,正確的程式我已經修正了

    低溫烘培 於 2011/05/09 18:53 回覆

  • coolod
  • 大大你的第一種方法 遇到小數點就掛了 假如2458.6 會變成245,8.6分隔就錯誤了
  • 這部分已經重寫函式修正好了唷

    低溫烘培 於 2015/04/23 15:31 回覆