除了
之外还有更好的方法吗?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提供
0.28/0.02 = 14.000000000000002
我通过Math.round(0.28 / 0.02)解决了这个问题。 我很好奇有没有其他或更好的方法来解决这个问题
答案 0 :(得分:2)
JS Number类是64位浮点数,因此它必然会在像这样的极端情况下失去精度(对于整数> 2 ^ 53)。
在你的情况下使用Math.round和他们的朋友是可以的。有关问题和可能的解决方法的完整讨论,请参阅@Bergi提供的article。
答案 1 :(得分:1)
我想知道在你的特定情况下是否更容易预先处理索引的哈希值,如下所示:
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;
}
然后,您可以在不执行Math.round
的情况下从浮点值中获取整数索引:
someValues[fpIndexesHash['0.02']]; // the same as someValues[1];
我在这里使用了字符串,但实际上我认为也可以使用普通的浮点字面值:我的理解是,在同一台机器上,特定的浮点字面值永远不会由同一台机器上的不同IEEE-754值表示。脚本的生命周期。
因此,即使0.06
字面值在内存中实际表示为0.060000001
个数字,它也会是统一的 - 并且会在{{}中转换为相同的字符串值{1}}分配并在解释中。