Javascript避免0.2+;0.4=0.600000000000001,数学圆()

Javascript避免0.2+;0.4=0.600000000000001,数学圆(),javascript,performance,Javascript,Performance,除此之外还有更好的办法吗 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 我用数学圆(0.28/0.02)解这道题。 我很好奇有没有其他或更好的方法来解决这个问题JS Number类是64位浮点,所以在这种情况下(同样对于大于2^53的整数),它肯定会丢

除此之外还有更好的办法吗

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
我用数学圆(0.28/0.02)解这道题。
我很好奇有没有其他或更好的方法来解决这个问题

JS Number类是64位浮点,所以在这种情况下(同样对于大于2^53的整数),它肯定会丢失精度


在你的案例中,可以使用Math.round和他们的朋友。有关该问题和可能的解决方法的详细讨论,请参阅@Bergi提供的。

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;
}
我在这里使用了字符串,但实际上我认为这里也可以使用普通浮点文本:我的理解是,在脚本的生命周期内,同一台机器上的特定浮点文本永远不会由不同的IEEE-754值表示


因此,即使
0.06
literal实际上在内存中表示为
0.060000001
数字,它也将是统一的-并且将在
fpIndexesHash
赋值轮和解释轮中转换为相同的字符串值。

我想知道,在您的特定情况下,预先设置索引哈希不是更容易些,像这样:

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;
}
我在这里使用了字符串,但实际上我认为这里也可以使用普通浮点文本:我的理解是,在脚本的生命周期内,同一台机器上的特定浮点文本永远不会由不同的IEEE-754值表示


因此,即使
0.06
literal在内存中实际表示为
0.060000001
数字,它也将是统一的-并且将在
fpIndexesHash
分配轮和解释轮中转换为相同的字符串值。

您是否尝试过(0.28/0.02)。toFixed(2)?@Dart产生“14.00”,这可以解释为字符串键
Math.round
适合您的用例。或者,您可以通过将数字乘以50来进行整数运算。您是否尝试过(0.28/0.02)。toFixed(2)?@Dart生成“14.00”,这可能被解释为字符串键
数学。round
适合您的用例。或者,你可以把这些数字乘以50来做整数数学。