Почему мое выражение приведения типов с плавающей точкой возвращает два разных значения? - PullRequest
0 голосов
/ 12 марта 2020

Вот выражения, с которыми я работаю:

float firstValue = (float) (5 / 2); //output is 2.0
float secondValue = (float) 5 / 2; //output is 2.5

Я в тупике и не могу понять, почему это приведение типов возвращает два разных значения. Я понимаю, что могу просто сделать (5f / 2f), но я хотел поэкспериментировать с использованием другого приведения типов с выражением. Почему firstValue 2,0 и secondValue 2,5? Откуда взялся .5 go?

Ответы [ 3 ]

3 голосов
/ 12 марта 2020

Поскольку скобки имеют наивысший приоритет, они решаются первыми

float firstValue  = (float) (5 / 2);  // division of integers
                  = (float) (2);      // 5/2 = 2 , as Integers are being divided
                  = 2f
float secondValue = (float) 5 / 2; // division of float with integer
                  = ((float) 5) / 2;
                  = 5f / 2;          // second value is equivalent to this
                  = 2.5f             // as Float divided by Integer is Float
2 голосов
/ 12 марта 2020
  1. float firstValue = (float) (5/2); // деление целых чисел

Первым шагом является вычисление 5/2. Затем ответ дается в формате с плавающей запятой. Если вы объясните далее 5 и 2, являются целыми числами. После вычисления int для двух чисел int, окончательный ответ возвращается int. Здесь заключительный ответ int (2) преобразуется в ответ с плавающей точкой. То есть здесь используется более широкое преобразование. Таким образом, окончательный ответ - целочисленное значение (2), показанное в форме с плавающей запятой (2.0).

2.float secondValue = (float) 5/2; // вывод равен 2.5 Так как первое значение (5) названо числом с плавающей запятой, окончательным ответом будет само десятичное число

1 голос
/ 12 марта 2020

Первый - целочисленная математика. Это

float firstValue = (float) (5 / 2); 

Сначала делит пять на два и получает два. Затем он преобразует два в 2.0. Второе - математика с плавающей точкой.

float secondValue = 5f / 2; 

Что составляет 2,5 (и float). Поскольку float, деленное на int, является float.

...