0

数値を丸める必要があるかどうかを判断するために使用したい簡単なJavaScriptがいくつかあります。

例:ユーザーが1.2346と入力すると、数値は1.235に丸められ、数値が丸められたことを通知するメッセージがユーザーに表示されます。数値の丸めは問題ではありませんが、ユーザーにエラーメッセージを表示することは問題です。小数点以下の桁数を探す必要があります。

次のコードを使用して、文字列から小数点以下の桁数を取得します。次に、変数の長さを数えて小数点以下の桁数を取得します。

var dp = field_value - Math.floor(field_value);

ただし、これをテストするときは1.23、の値を入力しますfield_value。フィールド値の値を確認すると、確かに1.23です。Math.floor(field_value)の値を確認すると、確かに1です。しかし、dpの値を確認すると、次のようになります。0.22999999999999998

この減算が期待どおりに機能しないのはなぜですか?

4

2 に答える 2

1

問題は、浮動数が有限表現を持っているという事実によって与えられます。ここを見て、その方法と理由を理解してください。

丸めの問題がその数値の印刷だけである場合は、JS用のsprintfのようなものを使用して、必要に応じて浮動小数点出力をフォーマットできます。

于 2012-12-07T15:27:31.683 に答える
0

浮動小数点数の表現であまりにも正確で具体的なことをしようとすると、常にトリッキーな状況になります。他の人が指摘しているように、これはIEEE-754浮動小数点標準のプロパティです。文字列として扱い、数値を分析しようとするだけでなく、次のようにして、決定論的に目的の形式に丸めることもできます。

function roundFloat(num, decimalPlaces) {
    multiplier = Math.pow(10, decimalPlaces);
    return Math.round(num * multiplier) / multiplier;
}
于 2012-12-07T15:43:02.710 に答える