JavaScript,数字舍入问题

javascript, issue with number rounding

本文关键字:问题 舍入 数字 JavaScript      更新时间:2023-09-26

我知道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(正常)和aff = 0.16999999999999998%(参数)

如何获得aff = 0.17

("0.16999999999999998").tofixed(2)给你0.17

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

现场演示

toFixed 在 MDN 上

如果要aff保留数字而不是转换为字符串,则可以使用 toFixed 来解决精度问题,然后使用一元运算符将其"转换"回数字+如下所示:

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

您可能希望使用比小数点后 2 位更高的精度以避免舍入问题,我在这里使用了 10。

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