2013-08-30 5 views
-1

У меня есть простая C программа (скомпилирована на малине pi), которая должна рассчитать 17,67 * 20 (что составляет 353,4) Я пытался "%g" и "%.1f"Почему печать округляется?

#include <stdio.h> 
#include <math.h> 

int absolute_humidity(float temp) 
{ 
    float abs_hum = (17.67 * temp); 
    return abs_hum; 
} 

int main() 
{ 
    float abshum = absolute_humidity(20.0); 
    printf("%g",abshum); 
} 
+4

Почему ваша функция возвращает int? –

ответ

8
absolute_humidity returns an `int` 

Изменение подписи в

float absolute_humidity(float temp); 
4

Ваша функция absolute_humidity возвращает int. Он достаточно умен, чтобы вытащить int в float для вас, но это усекает .4.

Изменить тип возврата к float и все должно быть прекрасно:

float absolute_humidity(float temp) { 
    return 17.67 * temp; 
} 

int main() { 
    printf("%f", absolute_humidity(20.0)); 
} 
3

Поскольку функция возвращает absolute_humidityint.

Изменить его вернуть float бы вывод: 353.4

2

Вы преобразовывая свой расчет на int, таким образом, потери точности.

Изменить absolute_humidity() на:

// Not returning int 
float absolute_humidity(float temp) 
{ 
    float abs_hum = (17.67 * temp); 
    return abs_hum; 
} 
+0

ahhh !! конечно! Это так просто! Благодаря :) – Greg

2

Должно быть,

float absolute_humidity(float temp) 
{ 
    float abs_hum = (17.67 * temp); 
    return abs_hum; 
} 

abs_num результат преобразовывается к целому, потому что вы возвращаете Int.

Смежные вопросы