我知道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
?
答案 0 :(得分:2)
("0.16999999999999998").tofixed(2)
为您提供0.17
。
答案 1 :(得分:1)
答案 2 :(得分:1)
如果您希望aff
保留一个数字而不是转换为字符串,您可以使用toFixed
解决精度问题,然后使用“转换”回一个数字一元+
运算符如下:
var n = 0.16999999999999998;
n = +n.toFixed(10); // 0.17
你可能想要使用比小数点后2位更高的精度来避免舍入问题,我在这里使用了10。
答案 3 :(得分:0)
这是JavaScript中的一个错误(虽然它也会影响其他一些语言,比如Python),因为它存储非整数的方式有点儿错误(二进制!)。解决它的唯一方法是将其四舍五入到小数位。