2015-12-23 2 views
-1

Я не знаю, почему результат округления java. Я использовал casting для float, я добавлял '.0f'. Ничто не хочет работать. Я знаю, что двойной лучше делить, но мне не нужен очень точный результат.Закругленный результат, даже литье в поплавок

int A = Integer.parseInt(listBytesAnsw.get(2), 16); //ex. 18 
int B = Integer.parseInt(listBytesAnsw.get(3), 16); //ex. 226 
float rpm = (float) (A*255+B)/4; //Ans=1204 wrong, should be 1203.75 

float rpm = (float) (A*255.0f+B)/4.0f; //dont work still 1204 
+2

'/ 4' является ** целочисленным разделителем **, независимо от того, отбрасываете ли вы верхнюю часть фракции на поток. Вы должны делить на '4.0f', чтобы получить желаемый результат. –

+0

Это не работает, даже я добавляю, как вы говорите – GarryMoveOut

+0

Нет, ваш пример неправильный. rpm = (A * 255 + B) /4.0 = (18 * 255 + 226) /4.0 = 4816/4.0 = 1204.0 Используя значения примера, результат * равен * 1204. –

ответ

-1

Ожидаемый результат. В конце концов:

255*226 = 4816 
4816/4 = 1204 

Конечно, округление, а затем литье не будет работать в случае, если у вас есть на самом деле не целое результат. Так что смотрите на следующий код

System.out.println("(float)(7/4)=" + ((float)(7/4))); 
System.out.println("(float)7/4=" + ((float)7/4)); 
System.out.println("(7+0.0f)/4=" + ((7+0.0f)/4)); 
System.out.println("7/(4+0.0f)=" + (7/(4+0.0f))); 

результаты в

(float)(7/4)=1.0 
(float)7/4=1.75 
(7+0.0f)/4=1.75 
7/(4+0.0f)=1.75 

Первый не работает, как вы выяснили. Но одно из других решений работает.

+0

Не нужно добавлять. (float) (7)/4 = 1,75 – FredK

+0

Уже добавлено. вы не скобки вокруг 7 – luksch