C ++ с плавающей точкой преобразуется в целые - PullRequest
1 голос
/ 11 октября 2010

У меня есть следующая функция, которая должна возвращать в среднем l1 - l7 . Тем не менее, кажется, возвращает только целое число. Почему это происходит, и как мне заставить его вернуть число с плавающей запятой, округленное до 2 десятичных знаков?

Отрывок:

int lab_avg(int l1,int l2,int l3,int l4,int l5,int l6,int l7) {
    float ttl;
    ttl = l1 + l2 +l3 +l4 +l5 +l6 +l7;
    return ttl / 7.0; 
}

Ответы [ 5 ]

9 голосов
/ 11 октября 2010

Поскольку тип возврата вашей функции - int. Измените его на float, и оно будет работать нормально.

Также, если вы просто хотите напечатать 2 десятичных знака, используйте соответствующий формат в вашей функции вывода. Вам не нужно ничего делать с самим поплавком:

printf("%.2f", some_value);
3 голосов
/ 11 октября 2010

Как отмечали другие, изменение типа возвращаемого значения на float вместо int приведет к значению float.

Для установки точности 2 цифр setprecision ( int n ), будет полезно ...

Также для точности вы можете использовать ios_base::precision ...

3 голосов
/ 11 октября 2010

тип возврата вашей функции должен быть плавающим вместо int

3 голосов
/ 11 октября 2010

Поскольку тип возвращаемого значения функции int.
Таким образом, результат ttl/7.0, который будет float, будет приведен к int, а затем возвращен.

Измените возвращаемое значениевведите float, чтобы исправить это.

0 голосов
/ 11 октября 2010
float ttl;
float lab_avg(int l1,int l2,int l3,int l4,int l5,int l6,int l7) 
 {

 ttl = l1 + l2 +l3 +l4 +l5 +l6 +l7;
 return (ttl/7); 
 }

int main()
 {
  lab_avg(11,12,13,14,15,16,17);
   printf("%.2f", ttl);
  return 0;
}
...