人类智能与Javascript功能

时间:2013-07-08 07:55:02

标签: javascript math floating-point

我使用了javascripts eval函数。但我不喜欢结果。如何解决这个问题?

表达式:

  

的eval(1.2 + 24-25)

结果:

  

0.1999999999999993

我想要0.2结果。

3 个答案:

答案 0 :(得分:10)

你遇到的问题是0.2,就像#34;大多数数字"在IEEE754中没有确切的表示,只要你在计算中合并数字就会出现问题。您与0.2+1-1存在类似问题。

要获得正确的表示,您可以在转换回数字之前缩小为固定的十进制表示,例如

var v = +(1.2+24-25).toFixed(10)

这会产生

0.2

一般做法是使用数字进行所有计算而不进行舍入或使用toFixed,并在向用户显示结果时仅使用此类转换(然后+并非如此有用)。

答案 1 :(得分:8)

首先,eval在这里完全没有理由。只是:

1.2 + 24 - 25

会做你想做的事。

这里的问题是JavaScript(和其他语言)使用的IEEE-754双精度浮点数并不完全准确。他们非常快,但不完全准确。

更着名的例子是:

0.1 + 0.2

...它会为您提供0.30000000000000004

如果您正在进行财务计算或类似的工作,您需要的结果与使用铅笔和纸张的结果相同,那么您将需要一个能够实现这种风格的库(这将会更慢,但是,如果没有像上面这样的问题,就会遇到您更熟悉的问题,例如无法完全准确地表示1 / 3This question and its answers here on Stack Overflow讨论各种图书馆选项。

答案 2 :(得分:-1)

使用toFixed函数

var num =1.2+24-25;
var fixed=num.toFixed(1);

fixed现在是“0.2”作为字符串