2009-06-18 30 views
12

我有一個貨幣輸入,只需要返回有效數字。輸入總有兩位小數,所以:用javascript切割未使用的小數點

4.00 -> 4 
4.10 -> 4.1 
4.01 -> 4.01 

這裏是我當前如何做:

// chop off unnecessary decimals 
if (val.charAt(val.length-1) == '0') { // xx.00 
    val = val.substr(0, val.length-1); 
} 
if (val.charAt(val.length-1) == '0') { // xx.0 
    val = val.substr(0, val.length-1); 
} 
if (val.charAt(val.length-1) == '.') { // xx. 
    val = val.substr(0, val.length-1); 
} 

其工作,並具有一定的直接它,我挺喜歡的,但也許有更漂亮的方法。

我想我可以使用一個循環並遍歷它三次,但實際上它似乎至少像條件化if語句時一樣龐大。除此之外,有什麼想法?我想有一個正則表達式的方式來做到這一點...

回答

14

我相信parseFloat()這樣做。

parseFloat(4.00) // 4 
parseFloat(4.10) // 4.1 
parseFloat(4.01) // 4.01 
+1

浮子可能沒有足夠的精度準確地表示給定十進制值;你不應該用它們來表示貨幣。 – 2009-06-18 21:57:54

+0

這是真的。 – 2009-06-18 21:59:16

1
String(4) // "4" 
String(4.1) // "4.1" 
String(4.10) // "4.1" 
String(4.01) // "4.01" 

parseFloat工作,但你必須將它轉換回一個字符串。

14

您的代碼還會像「1000」一樣切掉零。一個更好的變體是隻有在小數點之後的零的碎片。基本替代使用正則表達式應該是這樣的:

str.replace(/(\.[0-9]*?)0+$/, "$1"); // remove trailing zeros 
str.replace(/\.$/, "");    // remove trailing dot 
2

所以,你開始用繩子和你想要一個字符串結果,是這樣嗎?

val = "" + parseFloat(val); 

這應該工作。更簡潔

val = "" + +val; 

val = +val + ""; 

會工作爲好,但這種形式是太難理解了。

這些工作如何?他們將字符串轉換爲數字,然後再轉換爲字符串。您可能不想使用這些,但瞭解JavaScript轉換的工作方式將幫助您調試所做的任何事情。

3
string to string: parseFloat(value).toFixed(2); 
string to number: +(parseFloat(value).toFixed(2)) 
number to number: Math.round(value*100)/100; 
number to string: (Math.round(value*100)/100).toFixed(2); 
0

我正試圖找到像現在這樣的解決方案。我就是這樣來的。

我用Number()函數我的應用程序,但看起來像它的工作一樣parseFloat()

http://jsfiddle.net/4WN5y/

我刪除和檢查號碼前的逗號。

var valueAsNumber = Number(val.replace(/\,/g,'')); 
2

我覺得這是你想要

v = 33.404034 
    v.toFixed(2) # v -> 33.40 
    parseFloat(v.toFixed(2)) # 33.4 

什麼,你有

v = 33.00704034 
    v.toFixed(2) # v -> 33.01 
    parseFloat(v.toFixed(2)) # 33.01 

    v = 33.00304034 
    v.toFixed(2) # v -> 33.00 
    parseFloat(v.toFixed(2)) # 33