Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript的数学错误_Javascript_Math - Fatal编程技术网

javascript的数学错误

javascript的数学错误,javascript,math,Javascript,Math,我刚刚注意到javascript中最奇怪的简单加法问题 我有一个简单的方程式: -1.000+(1.001)答案应该是.001但是我得到的是0.0009999999999999999999。我不明白为什么会发生这种情况,而且似乎没有任何办法得到正确的答案。我用多个计算器检查过,它们都给了我.001,但javascript给了我这个疯狂的数字 发生了什么事?这是不对的。数字非常接近,但完全错了。我尝试过其他的小数值,得到了奇怪的结果。javascript怎么能不正确地计算呢 以下是我使用的简单警报

我刚刚注意到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));