【问题标题】:javascript, issue with number roundingjavascript,数字舍入问题
【发布时间】:2012-04-25 14:25:18
【问题描述】:

我知道 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

【问题讨论】:

标签: javascript decimal rounding


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    var aff = (r * 100).toFixed(2) + "%";
    

    Live DEMO

    toFixedMDN

    【讨论】:

      【解决方案3】:

      如果您想将aff 保留为数字而不是转换为字符串,您可以使用toFixed 解决精度问题,然后使用一元+ 将其“转换”回数字像这样的运算符:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-13
          • 1970-01-01
          • 1970-01-01
          • 2023-03-18
          • 2020-09-17
          相关资源
          最近更新 更多