虽然3*0.1无法精确表示,但为什么Javascript可以正确计算0.15*2?
可能重复:虽然3*0.1无法精确表示,但为什么Javascript可以正确计算0.15*2?,javascript,floating-point,Javascript,Floating Point,可能重复: 在Javascript中 3 * 0.1 = 0.30000000000000004 我认为这是由于语言的数字系统,其中0.3无法准确表示。但为什么会这样 0.15 * 2 = 0.3 同样地 0.1 + 0.2 = 0.30000000000000004 但是 怎么样 但为什么会这样 0.15 * 2 = 0.3 0.15*2=0.3 结果不完全是0.3,但它足够接近,因此当最低有效数字被舍入以显示值时,它被舍入为0.3 值0.1和0.15也不精确,但表示0.1的误差似乎
在Javascript中
3 * 0.1 = 0.30000000000000004
我认为这是由于语言的数字系统,其中0.3无法准确表示。但为什么会这样
0.15 * 2 = 0.3
同样地
0.1 + 0.2 = 0.30000000000000004
但是
怎么样
但为什么会这样
0.15 * 2 = 0.3
0.15*2=0.3
结果不完全是0.3,但它足够接近,因此当最低有效数字被舍入以显示值时,它被舍入为0.3
值
0.1
和0.15
也不精确,但表示0.1
的误差似乎大于0.15
的误差。当您在计算中使用这些值时,错误会累积,并且早晚它们会变得足够大,以至于在显示这些值时不会被舍入。这里有一个好地方可以了解有关浮点算术的更多信息:。JS解释器依赖于主机的底层库和/或浮点硬件来执行浮点运算,这实现了IEEE 754浮点标准。您可以在同一时间测试特定值。正如您所发现的,有些值将具有舍入/截断舍入功能。舍入有时正确,有时不正确。在显示舍入时,您能更好地解释舍入逻辑吗?我想toFixed
会显示error@Bertuz:该数字仅四舍五入到比数据类型所能表示的数字少几个数字,这将消除数据类型限制导致的大多数错误。当您看到显示一个类似0.3
的数字时,它首先被四舍五入为类似0.30000000000
,然后后面的零被省略。至少在大多数浏览器中,toFixed
函数可用于显示精确值。我在Chrome上测试了它,它会很高兴地显示100位数字。