我正在尝试添加一长串我定义为 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
最佳答案
这与这样一个事实有关,即许多用十进制表示法看起来很简单的数字不能精确地表示为二进制 float 。
让我们检查示例中的第一个数字,3.96
。当您将其存储在 float
中时,它将变为 3.95999999999999996447
。这在打印时会四舍五入,因此除非您将数字打印到许多有效数字,否则您不会看到错误。
因此问题不在于加法,而在于数字本身。但是,错误会随着您的累加而累积。
如果您希望计算准确,可以使用 BigDecimal
而不是 float
/double
。
关于java - 当我使用 java 添加 float 时,它会添加额外的分数如何避免它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15564953/