1

这是输入

<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

这是为什么????

4

5 回答 5

1

尝试用这个替换你计算 numb 的行:

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

使用此功能:

var _toPrecision = function( number , precision ){
    var prec = Math.pow( 10 , precision );
    return Math.round( number * prec ) / prec;
}
于 2013-05-04T21:52:52.407 回答
1

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

参考:

于 2013-05-04T21:50:25.800 回答
1

$(this).val().replace(/\D/g,"").这部分替换您的数字中的小数点555.61,使其成为具有 value 的整数55561,然后toFixed()使其成为55561.00。解决方法可能是使用

$(this).val().replace(/[^0-9\.]/g,"") 
于 2013-05-04T21:50:38.437 回答
0

您替换字符串中的所有非数字,这将为您提供“555.61”中的“55561”(句点被您的正则表达式替换调用替换)。这又由 toFixed() 方法评估为 55561.00。

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

 var numb=parseFloat($(this).val().replace(/\D(\.\D+)?/g,"")).toFixed(2);
于 2013-05-04T21:52:04.963 回答
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
于 2013-05-04T21:50:40.320 回答