【发布时间】:2018-06-10 17:36:43
【问题描述】:
这是我调用的方法来计算 1000 个整数的平均值:
public void setMeanSampleSize(ResultData[] R) {
double temp = 0;
for(int i = 0;i < R.length;i++){
temp = temp + R[i].getTotal();
}
MeanSampleSize = (int) temp/R.length;
}
作为 ResultData 对象一部分的变量 Total 是一个整数。
在 99.99% 的情况下,这可以正常工作,但在某些奇怪的情况下,代码会为 MeanSampleSize 生成错误的结果 2147483(这与 32 位整数最大值的 2,147,483,647 非常相似)。
谁能帮助理解为什么这个除法有时会起作用,而在其他情况下会给出完全错误的结果 2147483?
提前致谢!
【问题讨论】:
-
当它给出
2147483时你知道输入吗? -
你的代码很长,要写
MeanSampleSize = (int) Stream.of(R).mapToDouble(ResultData::getTotal).average().getAsDouble(); -
可能值得注意的是
= (int) temp/R.length是= ((int)temp) / R.length(整数除法),而不是= (int)(temp / R.length)(双除法将结果截断为int)。这可能不是问题,但似乎值得举报。 -
如果
temp大于Integer.MAX_VALUE,(int) temp将导致Integer.MAX_VALUE。 -
接受@Radiodef 的评论:...除以 1000(整数除法)是...2147483!所以,我上面的“这可能不是问题......”是错误的。 是的问题。
标签: java integer-division