用两位小数解析float,

时间:2013-05-04 21:46:54

标签: javascript jquery

这是输入

<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

为什么会这样?

5 个答案:

答案 0 :(得分:1)

这是因为您要删除非数字字符(\D),例如句点。所以"55.61"变成"5561",然后将其变成浮点数的二进制字符串表示,因此"5561.00"

参考文献:

答案 1 :(得分:1)

$(this).val().replace(/\D/g,"")此部分替换了您的号码.中的小数点555.61,使其成为值为55561的整数,然后toFixed()使其成为55561.00 {1}}。解决方法可能是使用

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

答案 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;
}

答案 3 :(得分: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

答案 4 :(得分:0)

您替换字符串中的所有非数字,这将从“555.61”获得“55561”(句点将被您的正则表达式替换调用替换)。这反过来通过toFixed()方法评估为55561.00。

尝试解析正则表达式中的可选句点,例如(未经测试)

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