0

私はJavaで以下のコードを書きます

ダブルスケール=1.0;
for(int i=0;i<6;i++){
    スケール=スケール/10;
}
System.out.println(スケール);

これの出力は 1.0000000000000002E-6ですが、これは間違っているようですが、5 回ループすると、出力は1.0E-5 以下のように正しくなります。

これがなぜなのか、どうすればこれを取り除くことができるのか教えてください。

4

3 に答える 3

2

これはfloating point精度の問題です。BigDecimalの代わりに使用しdoubleます。

    BigDecimal scale=BigDecimal.ONE;
    for (int i = 0; i < 6; i++) {
        scale = scale.divide(BigDecimal.valueOf(10));
    }
    System.out.println(scale);
于 2013-10-23T10:12:13.637 に答える
0

0.1 でさえ、正確な double 値として表現できないためです。これらのエラーが合計され、結果に表示されます。

于 2013-10-23T10:12:37.853 に答える
-3

初期化を変更しiます。

double scale=1.0;
for(int i=1;i<6;i++){
    scale=scale/10;
}
System.out.println(scale);

ここで、コードは for for 値 i = [1, 2, 3, 4, 5] を 5 回入力します。

于 2013-10-23T10:11:55.497 に答える