почему этот целочисленный результат не такой, как ожидалось? - PullRequest
0 голосов
/ 10 марта 2012

У меня 7 целых чисел и один расчет.Вычисление maximumY должно равняться -3940, но вместо этого выдает 1724869434.

Почему это?

in1 = 1000;
in2 = 1000;
in3 = 100;
in4 = 100;
in5 = 100;
in6 = 1000;
in7 = 100;
duration / 1000 = 24;
frequency1 / 1000 = 5
frequency2 / 1000 = 5
frequency3 / 1000 = 10
frequency4 / 1000 = 24
frequency5 / 1000 = 2
frequency6 / 1000 = 2
frequency7 / 1000 = 4

int cal1 = in1 + (in1 * (duration / 1000) / (frequency6 / 1000));
int cal2 = in1 + (in2 * (duration / 1000) / (frequency7 / 1000));
int cal3 = out1 +(out1 * (duration / 1000) / (frequency1 / 1000));
int cal4 = out2 +(out2 * (duration / 1000) / (frequency2 / 1000));
int cal5 = out3 +(out3 * (duration / 1000) / (frequency3 / 1000));
int cal6 = out4 +(out4 * (duration / 1000) / (frequency4 / 1000));
int cal7 = out5 +(out5 * (duration / 1000) / (frequency5 / 1000));

maximumY = (cal1) + (cal2) - (cal3) - (cal4) - (cal5) - (cal6) - (cal7);

1 Ответ

1 голос
/ 10 марта 2012

Вы можете использовать long, если хотите выполнить целочисленную арифметику.

В противном случае я бы использовал double с соответствующим округлением или BigDecimal.

Вы могли бы упростить свой код

long cal6 = out4 +(out4 * (duration / 1000) / (frequency4 / 1000));

есть

long cal6 = out4 +(out4 * 24 / (24));

или

long cal6 = out4 * 2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...