цель c плавающими значениями - PullRequest
6 голосов
/ 08 апреля 2011

Почему мы не можем сохранить результат деления двух целых чисел в переменной с плавающей запятой?

int a = 100;
int b =50;
float temp = b/a;

это дает t = 0!

также я сделал

int temp = b/a;

это дает t = 0!

, но когда я сделал

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

, это дает правильный результат.Почему так?

Ответы [ 5 ]

22 голосов
/ 08 апреля 2011

Причина, по которой float temp = b/a; дает 0, а float temp = (float)b/a; дает 0,5, заключается в том, что компилятор определяет тип вывода операции деления на основе типов операндов, а не типа хранения назначения. Проще говоря:

int   /   int = int
float /   int = float
int   / float = float
float / float = float

Итак, когда вы делаете float temp = b/a;, вы делите целочисленное деление на b и a, а затем сохраняете полученное целое число (0 в вашем примере) в переменную типа float. По сути, к тому времени, когда значение преобразуется в число с плавающей запятой, вы уже потеряли искомую информацию (предполагая, что хотите выполнить деление с плавающей запятой), и преобразование не вернет ее.

Чтобы получить желаемый результат (опять же, предполагая, что вы хотите выполнить деление с плавающей запятой), вам необходимо привести хотя бы один из операндов к float до того, как вы разделите .

3 голосов
/ 08 апреля 2011

Выражение ниже означает, что вы преобразуете свои целочисленные значения в число с плавающей точкой, прежде чем начинать операцию

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

Так может быть видно, как показано ниже

float temp = (float)50 / (float)100;

затем

float temp = 50.0 / 100.0 ;

И результат

temp = 0.5;
3 голосов
/ 08 апреля 2011

Его целочисленное деление - 50/100 равно 0, остаток (можно использовать модуль) равен 50.

Вам нужно будет использовать float, вне зависимости от того, используете ли вы int или начинаете с них.

3 голосов
/ 08 апреля 2011
int a = 100;
int b =50;
float temp = (float)b/a;
2 голосов
/ 08 апреля 2011

В вашем случае 50/100 - это 0,2.Получив результат для двух целых чисел, результат также будет в целочисленной форме, поэтому он усекает десятичную часть, давая вам только 0.Но в случае с плавающей точкой это считается плавающим делением, поэтому вы получите 0.2

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