javascript,数字四舍五入的问题

时间:2012-04-25 14:25:19

标签: javascript decimal rounding

我知道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 = 100t = 57674

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

我如何获得aff = 0.17

4 个答案:

答案 0 :(得分:2)

("0.16999999999999998").tofixed(2)为您提供0.17

答案 1 :(得分:1)

var aff = (r * 100).toFixed(2) + "%";

Live DEMO

MDN

上的

toFixed

答案 2 :(得分:1)

如果您希望aff保留一个数字而不是转换为字符串,您可以使用toFixed解决精度问题,然后使用“转换”回一个数字一元+运算符如下:

var n = 0.16999999999999998;

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

你可能想要使用比小数点后2位更高的精度来避免舍入问题,我在这里使用了10。

答案 3 :(得分:0)

这是JavaScript中的一个错误(虽然它也会影响其他一些语言,比如Python),因为它存储非整数的方式有点儿错误(二进制!)。解决它的唯一方法是将其四舍五入到小数位。