35

私はJavascriptで次のコードを持っています:

var m1 = 2232.00;
var percent = (10/100);
var total = percent*m1;
alert(total);

問題は、変数 "total" が "223.20000000000002" を与え、"223.2" である必要があることです。正しい値を取得するにはどうすればよいですか?

4

14 に答える 14

28

.toFixed()が最適なソリューションです。ドットの後に 2 桁しか保持されません。

実験 1:

var value = 3.666;
value.toFixed(2); //Output : 3.67

実験 2:

var value = 3.0000;
value.toFixed(2); //Output : 3.00
于 2015-07-29T15:05:37.287 に答える
7

正確な値を取得することはできません。これは、浮動小数点数の根本的な問題です。

次のコマンドを使用して、固定数の 10 進数を強制できますtoFixed

alert(total.toFixed(2));

ただし、これにより末尾のゼロが残ることに注意してください。これは望ましくない場合があります。でそれらを削除できます.replace(/0+$/,'');

于 2013-01-23T22:25:28.733 に答える
5

この数値を表示しようとしている場合は、toFixed(1)を使用して文字列に変換できます。これを行う場合は、文字列に別の数値を掛けることができないため、タイプを追跡します。

別の計算で使用する場合は、小数点以下1桁に切り捨てることができます。

Math.round( total * 10 ) / 10

ただし、さまざまな人が指摘しているように、不正確な値は浮動小数点数と同じです。

より良い情報については、コメントにリンクされている質問を参照してください。

于 2013-01-23T22:24:04.453 に答える
4

Dimitryのおかげで、次のページを使用して答えを見つけました。

JavaScript の浮動小数点チート シート

操作の正確な値が必要であり、それらはお金の操作に関連しているため、次のクラスを使用することにしました。

于 2013-01-23T22:55:00.227 に答える
2

total.toFixed(2)役立つかもしれません。ただし、total変数 be は文字列に型キャストされることに注意してください。

于 2013-01-23T22:25:42.370 に答える
1

ちょうど試して

var x = 0.07;
console.log((x+1)*100 - 100);

ここで、x の値を他の値に置き換えます ;-)

于 2017-07-17T13:46:30.267 に答える
0

あなたができる

var total = +(percent*m1).toPrecision(15);

223.2 === total;          // true
223.2 === 0.1*2232.00;    // false
于 2013-01-23T22:43:07.787 に答える
0

私は非常に簡単な解決策を見つけました。演算子は*10 進数に関しては少し壊れていますが、/演算子はそうではありません。a • b = a / (1/b) であるため、乗算は簡単に除算に変換できます。

function times(a, b) { return a/(1/b) }

percent * m1に置き換えるだけtimes(percent, m1)です。

更新:常に機能するとは限りません。

于 2018-01-16T09:29:37.023 に答える