总结数字javascript

时间:2013-12-25 11:47:09

标签: javascript

'-15.48' - '43'

刚刚在控制台中写了这个,结果如下:

-58.480000000000004

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

3 个答案:

答案 0 :(得分:3)

因为所有floating point数学都是这样的,并且基于IEEE 754 standard。 JavaScript使用64位浮点表示,这与Java的double相同。

要解决此问题,您可以尝试:

(-15.48 - 43).toFixed(2);

Fiddle demo

答案 1 :(得分:0)

使用:toFixed()

var num = 5.56789;
var n=num.toFixed(2);

result:5.57

答案 2 :(得分: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

所述使用钢笔和铅笔来检查
  • 这意味着几乎每次你在屏幕上看到浮点计算的结果 - 作为一个有限的数字 - 计算机有点欺骗你并向你展示一些近似值而不是实际结果
  • 这意味着几乎每次你将计算结果存储在变量中 - 它具有有限的大小,而不是大于计算机的可用内存 - 计算机有点欺骗你并保留一些近似值
  • 而不是真实的结果。

典型的陷阱可能包括。

  • 程序考虑了一些looong序列的总和,一个x AVG := AVG + X[i];种类的无限循环0 < X[i] < const。如果循环运行的时间足够长,你会发现在某些时候AVG不再更改该值,所有来自mthatpoint的元素都会被丢弃。
  • 程序使用不同的公式计算两次值,然后进行Value_1 == Value_2之类的安全检查。对于理论数学来说,价值是相等的,对于真实的计算机而言,它们不是。