2013-05-04 61 views
0

這是與該功能的輸入解析浮子具有兩個小數,

<input type="text" name="price" class="solo-numeros"> 

$(".solo-numeros").blur(function() { 
    var numb = parseFloat($(this).val().replace(/\D/g,"")).toFixed(2); 
    $(this).val(numb); 
}); 

我嘗試的結果從輸入具有兩個小數

所以改變爲浮動我試試

555.61 

但模糊值改變爲

55561.00 

爲什麼這樣?

+0

您與.replace捨去小數分隔符... – bfavaretto 2013-05-04 21:49:31

回答

1

$(this).val().replace(/\D/g,"")這部分取代了你的電話號碼,555.61小數點.,使其成爲一個整數,價值55561,然後toFixed()使得55561.00。解決方法可以使用

$(this).val().replace(/[^0-9\.]/g,"") 
0

\D替換任何非數字字符。 .不是一個數字字符,因此它被刪除。使用[^\d\.]代替,這意味着「任何字符不是一個數字,而不是字符.

var numb = parseFloat($(this).val().replace(/[^\d\.]/g, "")).toFixed(2); 
$(this).val(numb); 

輸出:

parseFloat(String('123.456').replace(/[^\d\.]/g, "")).toFixed(2); 
//123.46 
0

更換了所有非數字,這將給你的字符串中「55561」從「555.61」(這段時間被替換爲你的正則表達式替換調用),然後由toFixed()方法評估爲55561.00

嘗試解析可選句點,

var numb=parseFloat($(this).val().replace(/\D(\.\D+)?/g,"")).toFixed(2); 
1

嘗試更換,你計算麻木這一行:

var numb = _toPrecision(parseFloat($(this).val()) , 2); 

使用此功能:

var _toPrecision = function(number , precision){ 
    var prec = Math.pow(10 , precision); 
    return Math.round(number * prec)/prec; 
}