【问题标题】:How does the Node console display floating point numbers [duplicate]Node控制台如何显示浮点数[重复]
【发布时间】:2018-09-24 19:39:36
【问题描述】:

我知道编程语言试图以 10 为基数表示以 2 为基数的四舍五入问题。但是当我尝试使用 NodeJs 控制台时,有些情况让我感到困惑。我知道以 2 为底的数字不能完全以 10 为底表示 0.1。但是当我在控制台中输入 0.1 时,它会返回 0.1。起初我以为它只是将数字的表示返回到控制台。但是当进一步试验时,0.1 + 0.1 返回0.2。所以这是我的问题:

  1. 控制台如何知道将其精确舍入为0.2
  2. 为什么我只在输入0.2 + 0.1 之类的内容时遇到舍入错误,因为它会打印出0.3000000000004
  3. 当我们说x=0.1 之类的内容时,Node 会存储什么?

更新:我想我的问题并不清楚,所以我想举一个更好的例子。以 10 为底的 0.10.000110011001100110011...... 。这会在某个时候被切断,让我们说只存储了0.000110011001100110011。这实际上是基数为 10 的0.099999904632568359375。为什么当我们输入0.1 时控制台不打印出0.099999904632568359375。它如何能够通过舍入误差取回该数字?希望我的困惑的根源得到更多的理解。

【问题讨论】:

  • 它不仅适用于 nodejs,但浏览器也提供相同的输出:)
  • @Ashvin777 是的,我知道。但我想知道以 2 为基数的理论上无法表示的数字实际上如何以 10 为基数准确表示
  • 也许你可以看看这个-stackoverflow.com/questions/3439040/…
  • @Ashvin777 我意识到我的问题并不清楚。我已经为你更新了一个例子。希望这更清楚

标签: javascript node.js floating-point precision


【解决方案1】:

node.js 没有向您显示确切的值。 JavaScript 将Number 转换为字符串的默认值为to use just enough decimal digits to distinguish the Number value from neighboring representable values。我不知道node.js用的是什么方法,但简单地使用JavaScript的默认就可以解释了。

【讨论】:

  • 感谢您的回复。你的回答和我的问题一致!谢谢你。我只是有一个问题要进一步澄清您在链接帖子中提到的内容。您说 JS 会提高精度,直到该值与它的邻居区分开来。为什么 JS 从 0.099999046 向上舍入到 0.1.. 最后的舍入步骤是如何工作的?
  • 是否从截止点进行舍入?所以在四舍五入到 0.1 之后,它仍然比它的邻居更接近实际的二进制值
  • @alaboudi:该软件计算出满足要求的最短十进制序列是什么。它用于执行此操作的实际方法很复杂。这相当于打印.1变为(0.1000000000000000055511151231257827021181583404541015625,或者十六进制浮点格式0x1.999999999999ap-4)的数字时,该数字打印为“.1”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-11
  • 2020-11-16
  • 2021-12-26
  • 1970-01-01
  • 2010-11-16
相关资源
最近更新 更多