人类智能与Javascript功能

Bay*_*naa -4 javascript math floating-point

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

表达:

的eval(1.2 + 24-25)

结果:

0.1999999999999993

我想要0.2结果.

Den*_*ret 10

您遇到的问题是0.2,与"大多数数字"一样,在IEEE754中没有精确的表示,只要您在计算中合并数字,就会出现问题.你有类似的问题0.2+1-1.

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

var v = +(1.2+24-25).toFixed(10)
Run Code Online (Sandbox Code Playgroud)

这产生了

0.2
Run Code Online (Sandbox Code Playgroud)

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


T.J*_*der 8

首先,这里没有任何理由eval.只是:

1.2 + 24 - 25
Run Code Online (Sandbox Code Playgroud)

会做你想做的.

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

更有名的例子是:

0.1 + 0.2
Run Code Online (Sandbox Code Playgroud)

......给你的0.30000000000000004.

如果您正在进行财务计算或类似的工作,您需要的结果与使用铅笔和纸张的结果相同,那么您将需要一个能够实现这种风格的库(这将会更慢,但不是遇到上述问题,将会遇到您更熟悉的问题,例如无法1 / 3完全准确地表示.这个问题及其在Stack Overflow上的答案讨论了各种库选项.