【问题标题】:The Jquery displays $20.099999999999998 instead of $20.1Jquery 显示 $20.099999999999998 而不是 $20.1
【发布时间】:2010-12-18 04:41:18
【问题描述】:

这是Jquery代码:

  function Totalprice()
{
    var unitprice=$('#unitpay').val();
    var quota=$('#readers').val();
    var totalprice=unitprice*quota;
    $('#totalprice').text('$'+totalprice);

}

当 reader 的值为 67 且 unitpay 为 0.3 时,它会计算总价并显示 $20.099999999999998 ,而不是 $20.1。怎么了?如果我希望它显示 $20.1 而不是 $20.099999999999998,我该如何重写代码?

【问题讨论】:

  • 坏了!!!快结束了!!
  • 如果是加油站,则显示为 20.1999999999999 ;-)
  • 当然,这与jQuery无关。这是一个 javascript/浮点问题。
  • 这是一个浮点问题,与 JavaScript 无关。 1/10 不能用固定数量的二进制数字表示,同样 1/3 不能用固定数量的十进制数字表示。

标签: javascript jquery floating-accuracy


【解决方案1】:

这个怎么样:

$('#totalprice').text('$'+totalprice.toFixed(1));

或:

$('#totalprice').text('$'+totalprice.toFixed(2));

将其显示为实际的美元金额。

【讨论】:

    【解决方案2】:

    只需使用.toFixed(2)(link)

    问题是计算机不能准确地表示一些数字(它们是有限的,并且以二进制方式运行),所以会发生这样的事情。

    【讨论】:

      【解决方案3】:

      正如您热情的评论员所指出的,它是floating point error。快速简单的解决方案是使用像 toFixed() 这样的舍入方法。

      【讨论】:

        【解决方案4】:

        Javascript 有一些非常严重的浮点问题。尝试在 Firebug 控制台中输入 0.1+0.2 以获得一些乐趣。

        这不是 jQuery 的问题。如上所述,使用 toFixed()。

        【讨论】:

          猜你喜欢
          • 2011-07-01
          • 1970-01-01
          • 2014-07-28
          • 1970-01-01
          • 2011-07-02
          • 2017-02-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多