重複の可能性:
JavaScript の浮動小数点演算は壊れていますか?
JavaScript での乗算中に奇妙な数学的問題が発生しました。
$(parent).find('#id_deals-' + i + '-quantity').val()
結果 -> 10
$(parent).find('#id_deals-' + i + '-price').val()
結果 -> 3.99
上記の両方を次のように乗算します。
$(parent).find('#id_deals-' + i + '-price').val() * $(parent).find('#id_deals-' + i + '-quantity').val()
結果 --> 39.900000000000006
なぜこうなった?小数点以下の桁数を 2 桁に制限するにはどうすればよいですか?
10 は 10.0 でなければならないからでしょうか? しかし、実際の乗算の前に値をこの形式に自動的に変換するにはどうすればよいですか?
更新: syazdani の回答によると、提案されているように bigdecimal を実装しようとしました:
十分に文書化されていませんが、次のように機能しました。
function run(opts) {
var bd = {"BigDecimal":BigDecimal, "BigInteger":BigInteger, "RoundingMode":RoundingMode};
var result;
var ops = {'*': "multiply", '/': "divide", '+': "add", '-': "subtract"};
var a = new bd.BigDecimal("" + opts.a);
var b = new bd.BigDecimal("" + opts.b);
var op = ops[opts.op];
if (op == "divide") {
return a.divide(b, 300, bd.RoundingMode.HALF_UP());
} else {
return a[op].call(a, b);
}
}
function multiply(a, b){
return run({"a":a,"b":b,"op":"*"});
}