javascript - 另一个 float 问题

标签 javascript python floating-point

我已经阅读了这里关于 float 的大部分帖子,并且我理解使用 IEEE 754(并且只是由于以二进制形式存储数字的性质)无法表示某些分数的基本潜在问题。我想弄清楚以下内容:如果 Python 和 JavaScript 都使用 IEEE 754 标准,为什么要在 Python 中执行以下内容

.1 + .1

结果 0.20000000000000001(这是预期的)

在 Javascript 中(至少在 Chrome 和 Firefox 中)答案是 .2

无论表现如何

.1 + .2

两种语言的结果都是 0.30000000000000004

此外,执行 变量 a = 0.3;在 JavaScript 中打印结果 0.3

在 Python 中执行 a = 0.3 结果为 0.29999999999999999

我想了解造成这种行为差异的原因。

此外,OS 上的许多帖子都链接到 Java 的 BigDecimal 的 JavaScript 端口,但该链接已失效。有人有副本吗?

最佳答案

doing a = 0.3 in Python results in 0.29999999999999999

不完全——看:

>>> a = 0.3
>>> print a
0.3
>>> a
0.29999999999999999

如您所见,printing a 确实显示 0.3 -- 因为默认情况下 print 舍入为 6或 7 位十进制数字,同时在提示符下键入表达式(此处 a 是单变量表达式)显示结果的位数超过两倍(因此揭示了 float 的内在限制)。

关于如何显示数字,Javascript 的舍入规则可能略有不同,舍入的具体细节足以解释您观察到的差异。请注意,例如(在 Chrome javascript 控制台上):

> (1 + .1) * 1000000000
  1100000000
> (1 + .1) * 100000000000000
  110000000000000.02

看到了吗?如果您设法看到更多数字,异常(不可避免地存在)也会变得可见。

关于javascript - 另一个 float 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3048865/

相关文章:

javascript - 如何使我的无限图像旋转器能够应用于许多旋转框

javascript - 如何运行单个 Testacular 单元测试?

python - 在pandas中返回 float 而不是ndarray - python

python - pandas 和 numpy 的意思不同

python:将 float 转换为字符串时,在点后强制加两个零

javascript - 为 Couchbase 生成唯一的 UInt32 ID

javascript - 如何使用 localStorage 恢复页面重新加载时 vimeo 的暂停时间?

python - 引发异常或引发异常()

python - Django休息框架: Access to passed arguments from views in serializers

numpy - 如何设置numpy浮点精度?