-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の場合、10進数がたくさんあります。したがって、0.0に等しくなることはありません。

私の質問の説明があなたにとって十分に明確でない場合は、お詫び申し上げます。これはプロプログラマーにとって非常に簡単な質問かもしれません。しかし、私はそれを理解することはできません。私が間違ったことを教えてください。

4

3 に答える 3

2

BigDecimalの使用をお勧めします。
BigDecimalは、金融システムで使用されており、DoubleやFloatではなく、小数点以下のドット(つまり、価格)で正確な数値を表すために使用されていることを私は知っています。

詳細はこちら

于 2012-11-08T20:01:29.000 に答える
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 に答える
0

反復には整数を使用し、適切にスケーリングします。

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

    i--;
}

これは、倍率が10進数で表現できない場合でも機能します。

使用BigDecimalは小数でのみ機能します。たとえば、3分の1のステップで反復したい場合は、機能しません。

于 2012-11-08T20:44:44.803 に答える