-4

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

表达:

评估(1.2+24-25)

结果:

0.1999999999999993

我想要 0.2 的结果。

4

3 回答 3

10

您遇到的问题是,就像“大多数数字”一样,在IEEE7540.2中没有精确表示,并且只要您在计算中组合数字,问题就会出现。你会有类似的问题。0.2+1-1

为了获得正确的表示,您可以在转换回数字之前减少到固定的十进制表示,例如

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

这产生

0.2

一般的做法是使用数字进行所有计算而不进行四舍五入或使用toFixed,并且仅在将结果呈现给用户时使用这种转换(然后+不是真的有用)。

于 2013-07-08T07:58:44.310 回答
8

首先,这里根本没有理由eval。只是:

1.2 + 24 - 25

会做你想做的。

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

比较有名的例子是:

0.1 + 0.2

...这给了你0.30000000000000004.

如果您正在做财务计算或类似的事情,您需要与使用铅笔和纸的结果相同,那么您将需要一个可以执行这种风格的库(这会更慢,但有上述问题,就会有你更熟悉的问题,比如不能1 / 3完全准确地表示)。Stack Overflow 上的这个问题及其答案讨论了各种库选项。

于 2013-07-08T07:56:47.140 回答
-1

使用 toFixed 函数

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

固定现在是“0.2”作为字符串

于 2013-07-08T07:58:51.110 回答