2014-11-02 83 views
2

服務器提供JSON包含字符串1234567.89圓javascript字符串和顯示美元格式,無小數

如何將其轉換爲$ 1,234,568?我可以將它轉換成$ 1,234,567.89

return "$ " + parseFloat(n).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, "$1,"); 

雖然並不完美,因爲它幾輪下來與發到最近的美元,我還以爲下面會的工作,但它並不:

return "$ " + parseFloat(n).toFixed(0).replace(/(\d)(?=(\d{3})+\.)/g, "$1,"); 

我還沒有成功試過如下:

return "$ " + Math.round(parseFloat(n)).replace(/(\d)(?=(\d{3})+\.)/g, "$1,"); 

回答

3
function roundToDollars(n) { 
    return "$ " + 
     parseFloat(n).toFixed(0) 
      .replace(/(\d)(?=(\d{3})+$)/g, "$1,"); 
} 

請注意,我不認爲你要求的功能是一個好主意:

  • 您正在使用(不精確)浮點數進行小數運算。
  • 和你在這裏的輸入 - 「n」 - 是一個字符串,當它不是一個字符串。
  • 它聽起來像「格式數字」和「前置$」和「舍入到最近」位都是正交的,並且一個更清潔的API不會在一個函數中粘住它。

順便說一句,所有我從你的例子變化是「終結者」檢測 - 因爲量是圓的,我不是簡單的字符串的結尾($)尋找一個點(\.),但。爲了與兩者兼容,你可以使用正則表達式/(\d)(?=(\d{3})+(\.|$))/g

+1

似乎工作... http://jsfiddle.net/7ohvux2a/3/ – user1032531 2014-11-02 13:20:49

+0

+1這確實是正確的正則表達式 – anubhava 2014-11-02 14:06:47

1

試試這個:

function formatNumber(val){ 

    val = Math.round(parseFloat(val)); 
    while (/(\d+)(\d{3})/.test(val.toString())){ 
     val = val.toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2'); 
    } 

    return '$ ' + val; 

} 

alert(formatNumber(1234567.89)); 

小提琴:

http://jsfiddle.net/dybg5ye1/2/

編輯:忘記了美元符號:)

+0

感謝foxygen。 while語句的目的是什麼? – user1032531 2014-11-02 13:09:04

+0

它允許我們遍歷字符串,查找至少一個數字後跟3個數字,如果找到,插入逗號並更新值。一旦這個條件不再符合 - 循環退出,並返回格式化的值 – foxygen 2014-11-02 13:19:39