Javascript 避免 0.2 + 0.4 = 0.60000000000000001 而不是 Math.round
Javascript avoid 0.2 + 0.4 = 0.6000000000000001 other than Math.round()
除了
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)解决了这个问题。我很好奇是否有其他或更好的方法来解决这个问题
JS Number 类是 64 位浮点数,因此在像这样的极端情况下(对于 2^53>整数也是如此),它必然会失去精度。
在你的情况下使用Math.round和他们的朋友是可以的。有关问题和可能的解决方法的完整讨论,请参阅 @Bergi 提供的文章。
我想知道在您的特定情况下预缓存索引哈希不是那么容易吗,如下所示:
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
数字,它也将是统一的 - 并且在分配舍入和解释舍入fpIndexesHash
中都将转换为相同的字符串值。
相关文章:
- 如何防止Math.max()返回NaN
- Math.min()和Math.max()之间有什么区别?在Javascript中
- JavaScript Vector2d Math
- Javascript:Round Half偶数后2位
- Math.exp() for bigInt?
- 为什么Java和Javascript Math.round(-1.5)到-1
- Math.round MidPointRounding.AwayFromZero in javascript
- 使用Math.round的奇怪方法结果
- After Effects math.round Javascript script
- Math.round 不是构造函数
- Javascript 避免 0.2 + 0.4 = 0.60000000000000001 而不是 Math.round
- 有没有理由 math.round *1000 /1000 没有意义
- Math.round与Math.ceil相比会产生意想不到的结果
- Javascript math.round threshold
- Math.round() 添加前导零
- c#和Javascript中Math.round()的值不同
- IE8, Math.round() failure?
- 为什么Math.round在jquery中对我不起作用
- 如何使用math.round()纠正不准确的Javascript数学
- 为什么Math.round(-0.2)返回-0 ?