3

float として定義した数字の長いリストを追加しようとしています。数字を追加しているときに示されているように、数字が吹き飛ばされて表示されます。いくつかの余分な分数が追加されます。それらを回避するにはどうすればよいですか? どのデータ型を使用すればよいですか?

float number;
float sum;
....{
   ........
   System.out.println(number);               
   sum = sum + number;
   System.out.println("sum:" + sum);
}

結果

3.96
sum:3.96
5.04
sum:9.0
5.04
sum:14.04
2.16
sum:16.2
1.44
sum:17.640001
3.96
sum:21.600002
3.96
sum:25.560001
2.88
sum:28.440002
10.26
sum:38.700005
1.62
sum:40.320004
3.01
sum:43.33
1.8
sum:45.13
1.98
sum:47.11
1.935
sum:49.045002
3.96
sum:53.005
1.44
sum:54.445
1.44
sum:55.885
1.44
sum:57.324997
6.48
sum:63.804996
4.3
sum:68.104996
4

2 に答える 2

6

これは、10 進表記では単純に見える多くの数値が、2 進浮動小数点数として正確に表現できないという事実に関係しています。

あなたの例の最初の数字 を調べてみましょう3.96。に収納するとfloatになり3.95999999999999996447ます。これは印刷時に丸められるため、数値を有効桁数まで印刷しない限り、エラーは表示されません。

したがって、問題は足し算ではなく、数自体に関係しています。ただし、足し合わせるとエラーが蓄積されます。

計算を正確にしたい場合は、 /BigDecimalの代わりに使用できます。floatdouble

于 2013-03-22T07:27:40.327 に答える
0

printf を使用できます

System.out.printf("%.2f", sum);
于 2013-03-22T07:26:42.237 に答える