我使用了 javascripts eval 函数。但我不喜欢结果。如何解决这个问题?
表达:
评估(1.2+24-25)
结果:
0.1999999999999993
我想要 0.2 的结果。
我使用了 javascripts eval 函数。但我不喜欢结果。如何解决这个问题?
表达:
评估(1.2+24-25)
结果:
0.1999999999999993
我想要 0.2 的结果。
您遇到的问题是,就像“大多数数字”一样,在IEEE7540.2
中没有精确表示,并且只要您在计算中组合数字,问题就会出现。你会有类似的问题。0.2+1-1
为了获得正确的表示,您可以在转换回数字之前减少到固定的十进制表示,例如
var v = +(1.2+24-25).toFixed(10)
这产生
0.2
一般的做法是使用数字进行所有计算而不进行四舍五入或使用toFixed
,并且仅在将结果呈现给用户时使用这种转换(然后+
不是真的有用)。
首先,这里根本没有理由eval
。只是:
1.2 + 24 - 25
会做你想做的。
这里的问题是 JavaScript(和其他语言)使用的IEEE-754双精度浮点数并不完全准确。它们非常快,但并不完全准确。
比较有名的例子是:
0.1 + 0.2
...这给了你0.30000000000000004
.
如果您正在做财务计算或类似的事情,您需要与使用铅笔和纸的结果相同,那么您将需要一个可以执行这种风格的库(这会更慢,但有上述问题,就会有你更熟悉的问题,比如不能1 / 3
完全准确地表示)。Stack Overflow 上的这个问题及其答案讨论了各种库选项。
使用 toFixed 函数
var num =1.2+24-25;
var fixed=num.toFixed(1);
固定现在是“0.2”作为字符串