这是我调用的方法,本质上是计算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;
}
变量Total是ResultData对象的一部分,是一个整数。
在99.99%的情况下,这是正确的,但在一些奇怪的情况下,代码为MeanSampleSize产生错误的结果2147483 (这与32位整数最大值2,147,483,647非常相似)。
有人能帮助理解为什么这个除法有时会起作用,而在其他情况下会给出完全错误的结果2147483吗?
提前感谢!
发布于 2018-06-11 01:48:52
你在一个double
中建立你的总数,然后这样做:
MeanSampleSize = (int) temp/R.length;
这就是
MeanSampleSize = ((int) temp)/R.length;
正如Radiodef所说,如果temp
的值大于Integer.MAX_VALUE
,(int)temp
将是Integer.MAX_VALUE
(2147483647),它除以1000时(整数除)是... 2147483。
您可能希望首先除以(作为双精度),然后截断为int:
MeanSampleSize = (int) (temp / R.length);
但是,值得注意的是,使用double
执行此操作可能不是最好的选择,除非getTotal
返回一个double
,并且您希望累加这些小数值。但使用long
可能是值得的(并如上所述调整您的父母)。
https://stackoverflow.com/questions/50786356
复制相似问题