Javascript avoid 0.2 + 0.4 = 0.6000000000000001 other than Math.round()
本问题已经有最佳答案,请猛点这里访问。
除了
1 | Math.round(0.2+0.4) = 0.6 |
实际上,我有一系列的索引0,0.02,0.04,0.06,0.08,0.10----我必须把它转换成数组索引0,1,2,3,4,5--除以0.02
javascript提供
1 | 0.28/0.02 = 14.000000000000002 |
号
我用数学圆(0.28/0.02)来解决这个问题。我很好奇有没有其他更好的方法来解决这个问题
JS数字类是64位浮点,因此在像这样的角情况下,它必然会丢失精度(对于大于2^53的整数也是如此)。
在你的案例中使用math.round和他们的朋友是可以的。有关问题和可能的解决方法的完整讨论,请参阅@bergi提供的文章。
我想知道,在您的特定情况下,预处理索引的散列不是那么容易吗,比如:
1 2 3 4 5 | var fpIndexes = ['0', '0.02', '0.04', '0.06']; var fpIndexesHash = {}; for (var i = 0, l = fpIndexes.length; i < l; i++) { fpIndexesHash[fpIndexes[i]] = i; } |
然后您就可以在不执行
1 | someValues[fpIndexesHash['0.02']]; // the same as someValues[1]; |
号
我在这里使用了字符串,但实际上我认为在这里也可以使用普通的浮点文字:我的理解是,在脚本的生命周期中,特定的浮点文字在同一台机器上永远不会由不同的IEEE-754值表示。
因此,即使