-3

ここには単純なコードがありますが、除算や複雑な乗算はありません。

for ( double i=.1; i<=1; i+=.1) {
      System.out.println(i);
}

しかし、や など、 の値がi正確でない場合もあります。.79999999.600000001

なぜこれが起こったのですか?このコードを正確に変更するにはどうすればよいですか?

4

6 に答える 6

1

ループ内で使用intすると、問題が解決します。

for (int i=1;i<=10;i++) {
    System.out.println(i*0.1);
}

これは、小数が精度を失う可能性があり、正確に表現されていないために発生しています。詳細については、すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと
を知りたい場合があります。

于 2013-08-12T06:36:56.673 に答える
1

これは のよく知られた性質ですdouble
double は、0.x * 2^y (または 1.x * 2^x) の形式で数値を格納します。
これは、すべての整数を正確に表現できるわけで
はなく、最も重要なことに、すべての小数を正確に表現できるわけではないことを意味します。

ここのようなものを使用する必要があると思いBigDecimalます。

于 2013-08-12T06:37:55.400 に答える
0

これは、浮動小数点演算によるものです。正確な値が必要な場合は、次のような特別なクラスがありますBigDecimal

于 2013-08-12T06:38:24.227 に答える