JavaScript求和数字

3
'-15.48' - '43'

我刚才在控制台中输入了这段代码,结果如下:

-58.480000000000004

为什么会这样呢?如何才能得到正确的结果?

1
由于浮点运算。 - JAL
“正确结果”究竟是什么? - thefourtheye
3个回答

3
因为所有的浮点数运算都是基于IEEE 754标准进行的。JavaScript使用64位浮点数表示,与Java的double相同。
要修复它,您可以尝试:
(-15.48 - 43).toFixed(2);

小提琴演示


0
使用:toFixed()
var num = 5.56789;
var n=num.toFixed(2);

result:5.57

0

http://en.wikipedia.org/wiki/Machine_epsilon

人类计数使用十进制,而机器则主要使用二进制。10 == 2x5;2和5是互质的数字。然而,这个微不足道的事实却有一个令人不愉快的后果。

  • 在大多数计算(除了幸运的退化情况)中,使用“简单”的十进制数进行除法运算,结果将是一个无限重复的二进制数。
  • 在大多数计算(除了幸运的退化情况)中,使用“简单”的二进制数进行除法运算,结果将是一个无限重复的十进制数。

可以使用笔和纸按照http://en.wikipedia.org/wiki/Repeating_decimal#Every_rational_number_is_either_a_terminating_or_repeating_decimal中所述的方法进行检查。

  • 这意味着几乎每次您在屏幕上看到浮点计算结果时 - 作为有限数字 - 计算机都会对您进行某种欺骗,并显示一些近似值而不是真实结果。
  • 这意味着几乎每次您将计算结果存储在变量中 - 变量具有有限大小,不大于计算机可用内存 - 计算机都会对您进行某种欺骗,并保留一些近似值而不是真实结果。

典型的陷阱可能包括:

  • 程序正在计算某个长序列的总和,一个形如 x AVG := AVG + X[i]; 的无限循环,其中 0 < X[i] < const。如果循环运行足够长的时间,您会发现在某个时刻 AVG 不再改变其值,从那时起所有元素都被丢弃了。
  • 程序使用不同的公式计算某个值两次,然后进行安全检查,例如 Value_1 == Value_2。对于理论数学来说,这些值是相等的,但对于实际计算机来说,它们并不相等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接