我刚开始学习Javascript。我对下面的脚本及其HTML输出感到困惑。
脚本:
<h1>JavaScript Variables</h1>
<p id="demo"></p>
<script>
var x = 3.14;
document.getElementById("demo").innerHTML = x + 1;
</script>
</body>
</html>
输出: JavaScript变量
4.140000000000001
我想知道为什么我会得到4.140000000000001而不是4.14?如果我尝试x+ 2,x+ 3,x+ 4,输出也是错误的。如果x加上其他数字,如10,则输出是正确的。谢谢您的帮助。
发布于 2017-01-18 15:19:27
计算机硬件不像我们那样计算实数。这两种方法都不是“正确的”,因为有些数字需要无限的展开,而我们没有时间处理无限多的数字。例如,当我们计算1/3时,我们得到0.3333……我们习惯了截断这种扩展的不准确性,并认为它是“正确的”。当然,这并不完全正确。
计算机硬件不像我们那样使用基数10的计算。它使用以2为基数的计算形式。无限展开式在基数2中是不同的。例如1/10 (基数10)是0.000110001100011...(基数2)。
这两个系统都有不精确之处,因为我们必须截断无限的小数展开。不准确的地方是不同的。计算机硬件通过保留大量小数位数来补偿基数2中更频繁的无限扩展。
结论是,在某些情况下,你的答案并不是你所期望的。
如果您的应用程序不能接受这些错误(有些会计应用程序也不能),那么您需要在软件中模拟基数为10的算术。这里有相关的软件包。我没有使用它们的经验。这里有一个方法可以让你入门:
发布于 2017-01-18 04:40:57
它只发生在数字3.14中,它是PI的值(在javascript数学中预定义的,小数后面有15位)。检查此http://www.w3schools.com/jsref/jsref_pi.asp
您可以通过toFixed()函数设置decimal后的位数限制。
https://stackoverflow.com/questions/41711047
复制相似问题