Java中带双精度的For循环
问题。我有一串双“0.4 0.3 2.1等”。 我需要在这个列表中循环并计算每个数字的出现次数 我曾经Java中带双精度的For循环,java,for-loop,double,treemap,double-precision,Java,For Loop,Double,Treemap,Double Precision,问题。我有一串双“0.4 0.3 2.1等”。 我需要在这个列表中循环并计算每个数字的出现次数 我曾经 StringTokenizer stokens=新的StringTokenizer(值); while(stokens.hasMoreTokens()){ Double tempKey=新的Double(stokens.nextToken()); 整数tempCount=orderValues.get(tempKey); if(tempCount==null) tempCount=1; 其他的
StringTokenizer stokens=新的StringTokenizer(值);
while(stokens.hasMoreTokens()){
Double tempKey=新的Double(stokens.nextToken());
整数tempCount=orderValues.get(tempKey);
if(tempCount==null)
tempCount=1;
其他的
tempCount++;
orderValues.put(tempKey、tempCount);
}
其中values是字符串,orderValues是树映射
在此之后,我必须添加到树映射中所有缺失的值,从0到出现率为0的最大键值。
所以我用
用于(double i=0;i您使用的是原语double和类类型double,它们之间正在进行转换,因为它们都是浮点,所以您会看到浮点不精确。您使用的是原语double和类类型double,它们之间正在进行转换,因为它们都是浮点y您会看到浮点不精确。双精度类型的精度不足是众所周知的。通常,解决方案是使用BigDecimal。但是在您的特定情况下,由于每次迭代都要步进0.1,因此您也可以使用整数,并在需要时将其除以10
请注意,还应更改存储数据的方式。即,使用:
TreeMap<BigDecimal, Integer>
(or TreeMap<Integer, Integer>) instead of TreeMap<Double, Integer>
TreeMap
(或TreeMap)而不是TreeMap
另请参见BigDecimal的文档:
它不像double那样容易使用,但更安全。众所周知,double类型缺乏精度。通常,解决方法是使用BigDecimal。但是在您的特定情况下,由于每次迭代都要步进0.1,因此也可以使用整数,并在需要时将其除以10
请注意,还应更改存储数据的方式。即,使用:
TreeMap<BigDecimal, Integer>
(or TreeMap<Integer, Integer>) instead of TreeMap<Double, Integer>
TreeMap
(或TreeMap)而不是TreeMap
另请参见BigDecimal的文档:
这并不像使用一样容易,但更安全。在这张纸币上的可能复制品,看起来像是使用双倍作为地图的关键值,这是有点棘手的,因为浮点算术正是如此。也许你可能想考虑使用<代码> BigDecimal <代码>,而这也将解决你的迭代问题。这张纸币上的可复制副本,看起来像是使用双倍作为地图的关键值,这是有点棘手的,因为浮点算术正是如此。也许您可能想考虑使用<代码> BigDecimal <代码>,而这也将解决您的迭代问题。