我使用了javascripts eval函数。但我不喜欢结果。如何解决这个问题?
表达式:
的eval(1.2 + 24-25)
结果:
0.1999999999999993
我想要0.2结果。
答案 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 / 3
。 This 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”作为字符串