当我使用java添加浮点数时,添加额外的分数如何避免它们?

时间:2013-03-22 07:25:23

标签: java

我正在尝试添加一个我定义为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

2 个答案:

答案 0 :(得分:6)

这与以下事实有关:许多以十进制表示法看起来简单的数字不能完全表示为二进制浮点数。

让我们检查一下您的示例中的第一个数字3.96。将其存储在float时,它会变为3.95999999999999996447。这在打印时会四舍五入,因此除非您将数字打印到许多有效数字,否则您不会看到错误。

因此问题不在于添加,而在于数字本身。但是,当您添加内容时,错误会累积。

如果您希望计算完全正确,可以使用BigDecimal代替float / double

答案 1 :(得分:0)

您可以使用printf

System.out.printf("%.2f", sum);