2011-05-04 53 views
6

我想用下面的JavaScript來格式化編號:如何使用JavaScript格式化數字?

10.00=10,00 
1,000.00=1.000,00 
+0

你的意思是? http://stackoverflow.com/questions/51564/javascript-culture-sensitive-currency-formatting – 2011-05-04 12:04:03

+0

可能重複? http://stackoverflow.com/questions/4843691/javascript-regex-replacing-the-last-dot-for-a-comma – Pav 2011-05-04 12:04:10

+0

@Shadow Wizard:不,這是不一樣的。我無法使用該腳本得到1,50,000.00的結果爲1.50.000,00 .. – 2011-05-04 12:13:57

回答

1

JavaScript並沒有提供這個功能本身,但也有一些第三方的功能在其周圍可以做你想做的。

請注意,無論使用哪種方法,您都應該小心使用結果字符串進行顯示 - 在將小數點轉換爲逗號後,它不會是Javascript中的有效數字值。

我能提供的最快解決方案是使用由phpJS人員編寫的number_format()函數。他們已經實現了Javascript版本的一些常用的PHP函數,包括number_format(),並且這個函數將完全按照你想要的來執行。

在這裏看到的鏈接:http://phpjs.org/functions/number_format

我不會理會考慮整個phpJS庫(很多是價值可疑反正),但只要抓住頁面上顯示的20餘線功能鏈接到上面並粘貼到您的應用程序中。

如果你想要一個更靈活的解決方案,有許多JS函數可以模擬來自C的printf()函數。關於這個問題已經有一個很好的問題了。看到這裏:JavaScript equivalent to printf/string.format

希望有所幫助。

18

每個瀏覽器都支持Number.prototype.toLocaleString(),這是一種旨在從數字中返回本地化字符串的方法。但是,規範將其定義如下:

生成一個字符串值,該值表示根據主機環境的當前語言環境約定格式化的數字的值。該功能是實現相關的,允許但不鼓勵它返回與toString相同的內容。

實施依賴意味着供應商如何看待結果,並導致互操作性問題。

Internet Explorer(IE 5.5到IE 9)與您想要的最接近,並以貨幣形式格式化數字 - 千位分隔符並固定在2位小數位。

Firefox(2+)使用千位分隔符和小數位格式化數字,但僅限適用。

Opera,Chrome & Safari輸出與toString()相同 - 沒有千位分隔符,只有在需要時才輸入小數位。

解決方案

我想出了下面的代碼(基於an old answer of mine)嘗試和規範的結果,如Internet Explorer的方法工作:

(function (old) { 
    var dec = 0.12 .toLocaleString().charAt(1), 
     tho = dec === "." ? "," : "."; 

    if (1000 .toLocaleString() !== "1,000.00") { 
     Number.prototype.toLocaleString = function() { 
      var neg = this < 0, 
       f = this.toFixed(2).slice(+neg); 

      return (neg ? "-" : "") 
        + f.slice(0,-3).replace(/(?=(?!^)(?:\d{3})+(?!\d))/g, tho) 
        + dec + f.slice(-2); 
     } 
    } 
})(Number.prototype.toLocaleString); 

這將使用瀏覽器的內置如果可用,則爲本地化,而在其他情況下,優雅地降級到瀏覽器的默認區域設置。

工作演示:http://jsfiddle.net/R4DKn/49/

+3

由於支持正確的本地化,因此我正在爲此解決方案投票。我們中的一些人正在使用小數點逗號而不是點:-) – 2011-12-22 22:31:54

+0

+1 - 只是一個警告:需要修正才能正確處理負數。目前-100返回 - ,例如100.00。 – 2013-03-24 05:51:19

+0

只是要清楚。看到你需要調用的問題(-100).toLocaleString() – 2013-03-24 22:36:28