用两个小数解析浮点,

parse float with two decimals,

本文关键字:小数 两个      更新时间:2023-09-26

这是输入

<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

为什么????

这是因为要删除非数字字符('D(,例如句点。因此"55.61"变为"5561",然后将其转换为浮点的两个十进制字符串表示,因此"5561.00"

参考文献:

  • JavaScript正则表达式
  • String.replace()
  • Number.toFixed()

$(this).val().replace(/'D/g,"")这部分替换了数字555.61中的小数点.,使其成为值为55561的整数,然后toFixed()使其成为55561.00。变通办法可能是使用

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

尝试将计算麻木的行替换为以下行:

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

使用此功能:

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

'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

替换字符串中的所有非数字,该字符串将从"555.61"变为"55561"(句点将被regex replace调用替换(。这反过来又通过toFixed((方法计算为55561.00。

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

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