3

javascriptは除算で丸めの問題が発生する可能性があることはわかっていましたが、乗算では問題が発生しませんでした。それらをどのように解決しますか?

var p = $('input[name="productsUS"]').val().replace(",", ".");
var t = $('input[name="productsWorld"]').val().replace(",", ".");

if (p >= 0 && t >= 1) {
    var r = p / t;
    r = Math.round(r * 10000) / 10000;
    var aff = (r * 100) + "%";

もしp = 100そしてt = 57674

r = 0.0017(ok)とaff = 0.16999999999999998%(arg)

どうすれば入手できaff = 0.17ますか?

4

4 に答える 4

2

("0.16999999999999998").tofixed(2)あなたに与えます0.17

于 2012-04-25T14:27:14.043 に答える
1
var aff = (r * 100).toFixed(2) + "%";

ライブデモ

toFixedMDN

于 2012-04-25T14:28:35.517 に答える
1

aff文字列に変換する代わりに数値を維持したい場合はtoFixed、精度の問題を回避し、次の+ように単項演算子を使用して数値に「キャスト」することができます。

var n = 0.16999999999999998;

n = +n.toFixed(10); // 0.17

丸めの問題を回避するために、小数点以下2桁よりも高い精度を使用することをお勧めします。ここでは、10を使用しました。

于 2012-04-25T14:36:54.633 に答える
0

これはJavaScriptのバグです(ただし、Pythonなどの他のいくつかの言語にも影響します)。これは、整数以外の数値を格納する方法が少しバグがあるためです(バイナリ!)。これを回避する唯一の方法は、小数点以下第2位に四捨五入することです。

于 2012-04-25T14:31:41.707 に答える