【发布时间】:2018-09-24 19:39:36
【问题描述】:
我知道编程语言试图以 10 为基数表示以 2 为基数的四舍五入问题。但是当我尝试使用 NodeJs 控制台时,有些情况让我感到困惑。我知道以 2 为底的数字不能完全以 10 为底表示 0.1。但是当我在控制台中输入 0.1 时,它会返回 0.1。起初我以为它只是将数字的表示返回到控制台。但是当进一步试验时,0.1 + 0.1 返回0.2。所以这是我的问题:
- 控制台如何知道将其精确舍入为
0.2? - 为什么我只在输入
0.2 + 0.1之类的内容时遇到舍入错误,因为它会打印出0.3000000000004? - 当我们说
x=0.1之类的内容时,Node 会存储什么?
更新:我想我的问题并不清楚,所以我想举一个更好的例子。以 10 为底的 0.1 是 0.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