私は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 回入力します。