私はJavascriptで次のコードを持っています:
var m1 = 2232.00;
var percent = (10/100);
var total = percent*m1;
alert(total);
問題は、変数 "total" が "223.20000000000002" を与え、"223.2" である必要があることです。正しい値を取得するにはどうすればよいですか?
私はJavascriptで次のコードを持っています:
var m1 = 2232.00;
var percent = (10/100);
var total = percent*m1;
alert(total);
問題は、変数 "total" が "223.20000000000002" を与え、"223.2" である必要があることです。正しい値を取得するにはどうすればよいですか?
.toFixed()が最適なソリューションです。ドットの後に 2 桁しか保持されません。
実験 1:
var value = 3.666;
value.toFixed(2); //Output : 3.67
実験 2:
var value = 3.0000;
value.toFixed(2); //Output : 3.00
正確な値を取得することはできません。これは、浮動小数点数の根本的な問題です。
次のコマンドを使用して、固定数の 10 進数を強制できますtoFixed
。
alert(total.toFixed(2));
ただし、これにより末尾のゼロが残ることに注意してください。これは望ましくない場合があります。でそれらを削除できます.replace(/0+$/,'');
この数値を表示しようとしている場合は、toFixed(1)を使用して文字列に変換できます。これを行う場合は、文字列に別の数値を掛けることができないため、タイプを追跡します。
別の計算で使用する場合は、小数点以下1桁に切り捨てることができます。
Math.round( total * 10 ) / 10
ただし、さまざまな人が指摘しているように、不正確な値は浮動小数点数と同じです。
より良い情報については、コメントにリンクされている質問を参照してください。
Dimitryのおかげで、次のページを使用して答えを見つけました。
操作の正確な値が必要であり、それらはお金の操作に関連しているため、次のクラスを使用することにしました。
total.toFixed(2)
役立つかもしれません。ただし、total
変数 be は文字列に型キャストされることに注意してください。
ちょうど試して
var x = 0.07;
console.log((x+1)*100 - 100);
ここで、x の値を他の値に置き換えます ;-)
あなたができる
var total = +(percent*m1).toPrecision(15);
223.2 === total; // true
223.2 === 0.1*2232.00; // false
私は非常に簡単な解決策を見つけました。演算子は*
10 進数に関しては少し壊れていますが、/
演算子はそうではありません。a • b = a / (1/b) であるため、乗算は簡単に除算に変換できます。
function times(a, b) { return a/(1/b) }
percent * m1
に置き換えるだけtimes(percent, m1)
です。
更新:常に機能するとは限りません。