-1

我正在尝试将 I 的值从 1 迭代到 0 或从 0 到 1。但我遇到了一些问题。请检查以下代码:

double i = 1.0;
loop{  // Just use a loop to iterate the i. This is just a pseudocode. 
       // We can use while-loop or for-loop or timer. 
       // (I know there is no keyword "loop" in java)

   i -=0.1;

   if( i == 0.0){
     // stop the loop
   }
}

在上面的代码中,循环永远不会停止,因为在循环期间当 i = 0.8 - 0.1 时变量 i 将变为 0.7000000001。当 i = 0.1 - 0.1 时,我将有很多十进制数。所以它永远不会等于 0.0。

如果我对问题的描述对您来说不够清楚,我深表歉意。对于专业程序员来说,这可能是一个非常简单的问题。但我无法弄清楚。请让我知道我做错了什么。

4

3 回答 3

2

我会推荐使用 BigDecimal。
我知道 BigDecimal 用于金融系统,而不是 Double 或 Float,用于描述带有小数点的精确数字(即价格)。

在这里阅读更多

于 2012-11-08T20:01:29.000 回答
0

使用整数进行迭代并适当地缩放它们。

i = 10;
while (i != 0)
{
    double d = i / 10.0;
    // do stuff with d

    i--;
}

即使比例因子不能以十进制表示,这也将起作用。

使用BigDecimal仅适用于小数。例如,如果您想以三分之一的步长进行迭代,它将无法工作。

于 2012-11-08T20:44:44.803 回答
0

为什么不喜欢从 1...10 迭代并将当前值除以 10?像这样的东西:

for(int i = 0; i <= 10; i++) {
   double value = (double) i / 10d;
}

或者,如果您不想遇到精度问题,您可以使用 BigDecimal:

BigDecimal value = BigDecimal.ZERO;

for(int i = 0; i <= 10; i++) {
   value = value.add(BigDecimal.valueOf(0.1d));
   double doubleVal = value.doubleValue();
}
于 2012-11-08T20:06:29.997 回答