可能的重复:
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":"*"});
}