这是输入
<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 :(得分: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);