javascript的数学错误
我刚刚注意到javascript中最奇怪的简单加法问题 我有一个简单的方程式: -1.000+(1.001)答案应该是.001但是我得到的是0.0009999999999999999999。我不明白为什么会发生这种情况,而且似乎没有任何办法得到正确的答案。我用多个计算器检查过,它们都给了我.001,但javascript给了我这个疯狂的数字 发生了什么事?这是不对的。数字非常接近,但完全错了。我尝试过其他的小数值,得到了奇怪的结果。javascript怎么能不正确地计算呢 以下是我使用的简单警报框:javascript的数学错误,javascript,math,Javascript,Math,我刚刚注意到javascript中最奇怪的简单加法问题 我有一个简单的方程式: -1.000+(1.001)答案应该是.001但是我得到的是0.0009999999999999999999。我不明白为什么会发生这种情况,而且似乎没有任何办法得到正确的答案。我用多个计算器检查过,它们都给了我.001,但javascript给了我这个疯狂的数字 发生了什么事?这是不对的。数字非常接近,但完全错了。我尝试过其他的小数值,得到了奇怪的结果。javascript怎么能不正确地计算呢 以下是我使用的简单警报
alert(1.000-(1.001));
使用toFixed()方法进行尝试
看,这就是为什么有一千万个问题。这是因为其中有800万人来自那些在发布之前懒得查找浮点误差的人:-)请看一个解释。看看这个。@paxdiablo:这不是一个很友好的表达方式。我们大多数人都曾经问过这样或那样的问题。@RandyL:你检查过的计算器可能不像JavaScript和大多数其他编程语言那样使用IEEE754浮点运算。例如,它们可以以10为基数而不是二进制进行操作。在二进制浮点中,像0.001这样的数字没有精确的表示形式,而在以10为基数的数字中,它有您期望的精确值。Wolfgang的答案有一个解决方案,可以处理您可能感兴趣的大多数情况:只需使用
.toFixed()
将数字四舍五入到您想要的位数-但请记住,总会有这样的四舍五入错误。@MichaelGeary,笑脸显然将其称为幽默,我甚至建议建立一个网站来获取更多信息。但是,在任何情况下,你都不会在不了解指导原则的情况下跳进一个论坛,就像你在不花时间学习上下文的情况下跳进一个对话一样。这是我更可能认为粗鲁的,而不是对某人的温和抨击,而不是费心去研究一点点。如果Randy有问题,我很乐意重新措辞/调整/解释我的评论。
var erg = 1.000-(1.001)
alert(erg.toFixed(3));