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);
});

入力の結果を小数点以下 2 桁の float に変更しようとしています

だから私は試します

555.61

しかし、ぼかしの値は次のように変わります

55561.00

何故ですか????

4

5 に答える 5

1

\Dこれは、ピリオドなどの数字以外の文字 ( ) を削除しているために発生します。"55.61"となり"5561"、これが float の 2 桁の文字列表現になるため、"5561.00"

参考文献:

于 2013-05-04T21:50:25.800 に答える
1

$(this).val().replace(/\D/g,"")この部分は、数値の小数点.を に置き換え、555.61値を整数にして55561、それtoFixed()を にし55561.00ます。回避策は使用することができます

$(this).val().replace(/[^0-9\.]/g,"") 
于 2013-05-04T21:50:38.437 に答える
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 に答える
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 に答える
0

「555.61」から「55561」を与える文字列内のすべての非数字を置き換えます(ピリオドは正規表現の置換呼び出しによって置き換えられます)。これは、toFixed() メソッドによって 55561.00 に評価されます。

(untested) のような正規表現でオプションのピリオドを解析してみてください

 var numb=parseFloat($(this).val().replace(/\D(\.\D+)?/g,"")).toFixed(2);
于 2013-05-04T21:52:04.963 に答える