【问题标题】:Strange results when multiplying 3 by 1.1 [duplicate]将 3 乘以 1.1 时的奇怪结果 [重复]
【发布时间】:2014-11-10 12:52:34
【问题描述】:

当我在 JavaScript 中乘以 3 * 1.1 而不是返回 3.3 时,结果是 3.30000000000000003,这是为什么呢?

【问题讨论】:

  • 欢迎来到 Stack Overflow!目前我们只支持英文,请问您能翻译一下您的问题吗?
  • 这是因为 js 将数字存储为浮点值,而浮点运算并不总是 100% 准确。例如,0.2 + 0.1 在 javascript 中不会给出 0.3,而是 0.30000000000000004

标签: javascript floating-point multiplication


【解决方案1】:

这是因为计算机中的数字表示为floating point numbers,其精度有限。有些操作会导致微小的错误,你无能为力。

这也是从不使用 == 比较数字的原因。

【讨论】:

  • 感谢@cpacheco 翻译成西班牙语。
  • 那么如果我们不应该通过==比较它,那么推荐的方式是什么?
  • @AyushKumar 将它们与一些容差进行比较:a == b 变为 Math.abs(a - b) < TOLERANCE。这种容忍度取决于上下文。请注意,JS 具有“安全整数”的概念,IIRC 最高可达2^53,因此,如果您只对偶数进行加法、减法、乘法或除法运算,则会产生该范围内的值,你可以确定它们是相同的,你可以使用==
猜你喜欢
  • 2014-02-23
  • 1970-01-01
  • 2014-08-17
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 2020-10-22
  • 2015-04-14
  • 1970-01-01
相关资源
最近更新 更多