Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
虽然3*0.1无法精确表示,但为什么Javascript可以正确计算0.15*2?_Javascript_Floating Point - Fatal编程技术网

虽然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位数字。