首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java中除以整数会得到不正确的值2147483

在Java中除以整数会得到不正确的值2147483
EN

Stack Overflow用户
提问于 2018-06-11 01:36:43
回答 1查看 333关注 0票数 1

这是我调用的方法,本质上是计算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吗?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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可能是值得的(并如上所述调整您的父母)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50786356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档