【问题标题】:Restrict Float Precision in JavaScript限制 JavaScript 中的浮点精度
【发布时间】:2013-11-14 14:47:00
【问题描述】:

我正在处理 JavaScript 中的一个函数。我取两个变量 x 和 y。

我需要将两个变量相除并在屏幕上显示结果:

x=9; y=110;
x/y;

那么我得到的结果是:

0.08181818181818181

我需要使用我在另一篇文章中找到的 BigDecimal.js 之类的东西来做到这一点。

我希望结果显示为:

0.081

【问题讨论】:

标签: javascript floating-point fixed-point


【解决方案1】:

试试这个,它在昏迷后四舍五入到 3 个数字:

(x/y).toFixed(3);

现在您的结果将是一个字符串。如果你需要它是浮动的,那就做:

parseFloat((x/y).toFixed(3));

【讨论】:

  • 是的,但请注意.toFixed() 返回的是字符串,而不是数字。当然在这里可能无关紧要。
  • 是的,我现在想知道如果: var x = (9/110).toFixed(3);控制台.log(x);控制台.log(x*24);控制台.log(x/45);控制台.log(x--);即使它是字符串,所有这些都有效。什么时候重要?谢谢
  • @kajojeq,如果你像 (9/110).toFixed(3) === 0.082 那样做,它将返回 false
  • @smerny 是的,你说得对。我不经常使用===== 仍然正确。感谢您的快速回复!
  • “什么时候重要?”试试x + 42
【解决方案2】:

你可以这样做

Math.round(num * 1000) / 1000

这将正确地舍入它。如果您只想截断而不是实际舍入,可以使用floor() 而不是round()

【讨论】:

    【解决方案3】:

    使用它来将 0.818181... 舍入到 0.81:

    x = 9/110;
    Math.floor(x * 1000) / 1000;
    

    【讨论】:

      【解决方案4】:

      试试这个

      var num = x/y;
      parseFloat((Math.round(num * 100) / 100).toPrecision(3))
      

      【讨论】:

      • 您应该知道,这个问题已经有一年的历史了,有一个公认的答案和多个可能的重复项。因此,您应该格外小心,以证明您的答案比已经提供的回复更有用。
      【解决方案5】:

      如果我使用简单的表达式,结果可能会出乎意料:

      const fraction = (value) => {
        return value - Math.floor(value);
      }
      fraction(1 / 3);
      => 0.333333333333 // is Right
      fraction(22 / 3);
      => 0.33333333333333304 // is Unexpected
      

      所以,我的稳健表达是:

      const fraction = (value) => {
        return parseFloat(value.toString().replace(/^\d+$/, '0').replace(/^.+?(?=\.)/, ''))
      }
      fraction(22 / 3);
      => 0.333333333333333
      fraction(1111)
      => 0
      fraction(.122211)
      => 0.122211
      fraction(11111.122211)
      => 0.122211
      fraction(11111.12)
      => 0.12
      fraction(11111.11112)
      => 0.11112
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        相关资源
        最近更新 更多