2013-06-26 44 views

回答

7

我認爲,如果你想圓整數

var v = "153,452.47"; 
float.toFixed(0); 
// => 153452 

讓我們做一個可愛的小功能,這將很好地工作

var v = "153,452.47"; 
var float = parseFloat(v.replace(/[^0-9.]/g, '')); 
// => 153452.47 

var roundFormattedNumber = function(n){ 
    var result = parseFloat(n.replace(/[^0-9.]/g, '')); 
    return isNaN(result) ? NaN : result.toFixed(0); 
}; 

這個工程很好地多提供比其他解決方案,因爲它是一個白名單正則表達式替換,而不是黑名單之一。這意味着,它甚至會換號工作就像$ 1,234.56

提供不會爲這些數字

roundFormattedNumber("$ 123,456,489.00"); 
//=> 123456789 

roundFormattedNumber("999.99 USD"); 
//=> 1000 

roundFormattedNumber("1 000 €"); 
//=> 1000 

roundFormattedNumber("i like bears"); 
//=> NaN 
+0

謝謝。這太棒了:) – SharpCoder

+0

「這比其他解決方案提供的更好。」這取決於;如果你想在垃圾數據上快速失敗,你應該拋出一個錯誤,以便知道應用程序的失敗。接受字符串中可能有逗號與除數字之外的任何字符串不同。這些例子都沒有檢查NaN(當字符串中沒有數字時,你的函數會返回),但是在進一步處理數據之前這樣做是明智的。 +1爲一個很好的完整答案 – HMR

+0

@HMR,我已經添加了明確的NaN返回。感謝您的反饋。 – naomik

1

您必須刪除逗號工作的其他解決方案。

parseFloat("153,452.57".replace(/,/g,"")).toFixed(0); 

如果你想2位小數:

parseFloat("153,452.57".replace(/,/g,"")).toFixed(2); 
+0

他們之間有什麼區別,你寫了兩遍相同的代碼? – Anshul

+1

@pandit我已經編輯了我相信HMR意味着說的答案。 – jcsanyi

+0

@jcsanyi你現在很好。 – Anshul

0

嘗試這個

var v = "153,452.47"; 
Math.round(parseFloat(v.replace(",","")));