javascript加法和减法表现得很奇怪

时间:2013-07-30 09:33:39

标签: javascript javascript-framework

当我尝试执行这段代码时,它给了我一个非常奇怪的答案

<script type="text/javascript">
  a = 17.98 + 7.99 - 17.98 - 7.99 + 0 - 0;
  alert(a);
</script>
实际上它应该给我一个零。但相反,它给了我一个指数值。 有人可以帮我解答。

4 个答案:

答案 0 :(得分:2)

你应该得到-1.7763568394002505e-15。这代表-1.7763568394002505 * 10 ^( - 15)。这是一个非常接近于零的值;但是你没有得到零的事实是由于舍入错误。这是正常行为

如果您真的想了解进出,可以在http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

了解更多信息

答案 1 :(得分:1)

这是浮点计算的正常行为。

只有有限数量的值可以使用二进制浮点格式精确表示,因此大多数值都表示为最接近的可能值。

7.99之类的值可能表示为类似7.98999999999997754的值,因此这是解析代码时实际获得的值。

实际值与您期望的值之间的差异非常小,以至于当您只是直接显示值时它不会显示,因为当它被转换回字符串格式时,该值会被舍入。当你做几次计算时,小的差异会加起来,迟早你会看到它。

你得到的结果是-0.0000000000000017763568394002505,所以它非常接近零,但它并不完全为零。

答案 2 :(得分:1)

计算机在处理浮点方面并不是很好。

例如: 0.1 + 0.2 = 0.30000000000000004

  

因为在内部,计算机使用格式(二进制浮点)   不能准确地表示0.1,0.2或0.3之类的数字。   编译或解释代码时,您的“0.1”已经存在   四舍五入到该格式的最接近的数字,这导致一个小的   甚至在计算发生之前就会出现舍入错误。

详细了解:What Every Programmer Should Know About Floating-Point Arithmetic

答案 3 :(得分:0)

a = Math.ceil(17.98 + 7.99 - 17.98 - 7.99 + 0 - 0);