2013-10-10 48 views
0

我有什麼,我認爲是一個簡單的問題,但我發現很難找到簡單的解決辦法。我有一個捐贈頁面,人們可以輸入他們的金額。問題在於一些文化使用一段時間來表示小數,而另一些使用逗號。我也是四捨五入到最接近的整數。貨幣在多種文化

有沒有一種簡單的方法來格式化的數量,使得:

12.95將等於13. 12,95將等於13. 12000將等於12000 12 000將等於12000 12.000將等於12000. 12.45將等於12. 12,45將等於12.

基本上我需要去掉任何逗號和句點並創建一個合適的整數。這需要根據實際輸入的數字,因爲有些人可能會利用歐洲電腦和鍵盤,但希望捐出一美金金額等

謝謝!

回答

0

這裏是將工作的所有給出的實例最短的解決方案。我檢查倒數第三個字符,如果它的逗號或點我假定它是一個整數分隔符。

function parse(source) { 
    var sep = source.charAt(source.length - 3); 

    switch (sep) { 
     case '.': 
     case ',': 
      var parts = source.split(sep); 
      var norm = parts[0].replace(/(\.|,|\s)/g, '') + '.' + parts[1]; 
      break; 
     default: 
      var norm = source.replace(/(\.|,|\s)/g, ''); 
    } 

    return Math.round(Number(norm)); 
} 

演示:http://jsfiddle.net/5C4aN/2/

也對accounting.js這確實不錯格式化/解析貨幣看看。

+0

有一種簡單的方法來添加檢查NAN,這樣如果有人5,5fg5它會正確地檢測嗎? (或任何其他拼寫錯誤,這不是一個數?) – user1149499

+0

我應該說,我試圖用一個簡單的「如果NAN」檢查,但不承認逗號。所以「44,55」會拋出一個錯誤(當它不應該)時,該函數會給5f4一個「5」(當它不應該)。 – user1149499

+0

@ user1149499你可以使用''的數量()代替'parseFloat()'。它會在你的情況下返回'NaN'。我已經更新了我的答案。 – Pavlo