2016-04-10 2 views
-2

Если я выводить значение х для:Арифметические операции над значениями с плавающей точкой возврата неожиданный ответ

int a=1; 
int b=6; 
float x=(a/b); 

Выход 0,0

Но если я изменить третью строку в поплавка х = (поплавок) а/(с плавающей точкой) б;

Выход 0,1666667 (что должно быть)

Почему разница?

+1

Искать «Integer Отдел» ... – crashmstr

+0

Многих людей целочисленного деления в начальной школе и забыть. –

ответ

0

a/b рассчитывается как деление двух целых чисел, поэтому его результат является целым числом, и поэтому все за пределами десятичной плавающей запятой усекается, и вы получаете 0.0.

Например: если у вас:

int a = 6; 
int b = 4; 
float x =(a/b); 

Вы бы получить, что x = 1.0, так как результат вычисления усекается, а затем, когда вы назначаете его к поплавку, значение результата целого 1 получает приведение к поплавок, т.е. 1.0.

При расчете (float)a/(float)b, вы вычисляя деление двух float переменных и результат float (то же самое, что произойдет, если только одна из переменных/значений был float, а другой был integer).

0

Это потому, что обе переменные имеют тип int и, следовательно, деление возвращает int.

Чтобы заставить деление вернуть результат в float, вам необходимо отбросить хотя бы один из них до float.

Вот фрагмент кода:

public static void main (String[] args) throws Exception { 
    int a = 1; 
    int b = 6; 
    float x = ((float)a/b); 
    System.out.println("Result: " + x); 
} 

Выход:

Result: 0.16666667 

Примечание: В приведенном выше примере, я отлиты a к float. Вы также можете бросить b в float вместо a следующим образом:

float x = (a/(float)b);