私はJavaで以下のコードを書きます
ダブルスケール=1.0; for(int i=0;i<6;i++){ スケール=スケール/10; } System.out.println(スケール);
これの出力は
1.0000000000000002E-6ですが、これは間違っているようですが、5 回ループすると、出力は1.0E-5
以下のように正しくなります。
これがなぜなのか、どうすればこれを取り除くことができるのか教えてください。
私はJavaで以下のコードを書きます
ダブルスケール=1.0; for(int i=0;i<6;i++){ スケール=スケール/10; } System.out.println(スケール);
これの出力は
1.0000000000000002E-6ですが、これは間違っているようですが、5 回ループすると、出力は1.0E-5
以下のように正しくなります。
これがなぜなのか、どうすればこれを取り除くことができるのか教えてください。
これは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);
0.1 でさえ、正確な double 値として表現できないためです。これらのエラーが合計され、結果に表示されます。
初期化を変更し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 回入力します。