Деление на целое число в Java дает неверное значение 2147483 - PullRequest
0 голосов
/ 10 июня 2018

Это метод, который я вызываю для вычисления среднего значения 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% случаев это работает правильно, но в некоторых нечетных случаях код выдает неверный результат 2147483 для MeanSampleSize (который очень похож на 2 147 483 647 для 32-разрядного целого числа макс.).

Может кто-нибудь помочь понять, почему это разделение иногда будет работать, а в других случаях даст совершенно ошибочный результат 2147483?

Заранее спасибо!

1 Ответ

0 голосов
/ 10 июня 2018

Вы накапливаете свой итог в double, а затем делаете это:

MeanSampleSize = (int) temp/R.length;

, что составляет

MeanSampleSize = ((int) temp)/R.length;

Как сказал Radiodef, если temp 'значение s больше Integer.MAX_VALUE, (int)temp будет Integer.MAX_VALUE (2147483647), что при делении на 1000 (с целочисленным делением) равно ... 2147483.

Вы, вероятно, хотели бы разделить первым (как двойное число), а затем усечь до int:

MeanSampleSize = (int) (temp / R.length);

Стоит отметить различные комментарии, однако, выполнение этого с double, вероятно, не является вашей лучшей ставкой, если только getTotal не вернетdouble и вы хотите, чтобы эти дробные значения накапливались.Но, возможно, стоит использовать long (и скорректировать свои парены, как указано выше).

...