Java计算错误的平均值

时间:2021-04-07 09:32:48

标签: java

java jdk 1.8 中为什么平均是 16666.0 而不是 16666.32?平均四舍五入为2个浮点数怎么写在一行?

float[] floats = {20000.0f, 20000.0f, 10000.0f};

double average = 0;
for (Float f : floats) {
    average += f;
}
System.out.println(average);
average = Math.round(100 * (average / 3)) / 100;
System.out.println("Average salary: " + average);

1 个答案:

答案 0 :(得分:2)

这是因为 Math.round(100 * (average / 3)) 产生一个 long,然后除以 int,然后转换回双精度以适合 average

你应该用 double 而不是像下面这样的 int 来划分它

Math.round(100 * (average / 3)) / 100.0;

打印

50000.0
Average salary: 16666.67

这里是我以前调试的,我是一步一步搞定的

average / 3 = 16666.666666666668
100 * (average / 3) = 1666666.6666666667
Math.round(100.0 * (average / 3.0)) = 1666667
Math.round(100 * (average / 3)) / 100.0 = 16666
相关问题