【问题标题】:Javascript parsefloat bad subtraction [duplicate]Javascript parsefloat坏减法[重复]
【发布时间】:2016-09-05 20:47:06
【问题描述】:

我要减去两个浮点数,但得到 999998.7799999999 为什么?实际结果是999998.78

Money1="2,000,001.44 $";
Money2="1,000,002.66 $"
Money1= Number(Money1.replace(/[^0-9\.]+/g,""));
Money2= Number(Money2.replace(/[^0-9\.]+/g,""));
console.log(parseFloat(Money1)-parseFloat(Money2));

【问题讨论】:

  • 这和jQuery无关,只是vanilla JS

标签: javascript parsefloat


【解决方案1】:

您可以使用toFixed(2),因为您只使用两位数:

toFixed() 返回 numObj 的字符串表示形式,它不使用指数表示法,并且在小数点后具有精确的数字。必要时对数字进行四舍五入,必要时用零填充小数部分,使其具有指定的长度。如果 numObj 大于 1e+21,此方法只需调用 Number.prototype.toString() 并以指数表示法返回一个字符串。

sn-p:

Money1="2,000,001.44 $";
Money2="1,000,002.66 $"
Money1= Number(Money1.replace(/[^0-9\.]+/g,""));
Money2= Number(Money2.replace(/[^0-9\.]+/g,""));
result = (Money1 - Money2).toFixed(2);
console.log(result);

【讨论】:

    【解决方案2】:

    您的问题与浮点精度有关。 你可以找到解释here

    【讨论】:

      【解决方案3】:

      您想要的结果只是 Javascript 产生的结果的一个圆形版本 (read more about floating point operations in Javascript)。您可以自己对结果进行四舍五入以获得所需的格式:

      Money1="2,000,001.44 $";
      Money2="1,000,002.66 $"
      Money1= Number(Money1.replace(/[^0-9\.]+/g,""));
      Money2= Number(Money2.replace(/[^0-9\.]+/g,""));
      Rounded = Math.round((parseFloat(Money1)-parseFloat(Money2)) * 100) / 100;
      console.log(Rounded);

      【讨论】:

        【解决方案4】:

        结果是由于浮点精度,Python 文档有很好的解释。 https://docs.python.org/2/tutorial/floatingpoint.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-08
          • 1970-01-01
          • 1970-01-01
          • 2013-03-26
          • 1970-01-01
          相关资源
          最近更新 更多