2014-03-26 122 views
1

我已經看到很多關於從float轉換爲int32_T的問題,但沒有一個地址將int32_t轉換爲float。將int32_t轉換爲浮點數

我正在使用的數據以釐米爲單位。所以我只想確認,如果我嘗試將它們轉換爲浮點數,將不會有任何類型轉換問題。

我對此轉換感興趣的原因是我使用的函數僅適用於浮點數。所以如果我傳遞函數int32_t並期望浮動,它會自動爲我的參數進行類型轉換嗎?

+2

當你嘗試過什麼事之前? –

回答

5

如果您將int32_t傳遞給按參數值取float參數的函數,則會有隱式轉換(類型轉換)。一個警告是,IEEE754單精度float精度低於32位整數(它具有大約24位的精度,而32位爲int32_t),所以如果您使用大值,則可能會失去一些準確性。

例子:

#include <stdio.h> 
#include <stdint.h> 

int32_t sqr(int32_t x) 
{ 
    return x * x; 
} 

float sqrf(float x) 
{ 
    return x * x; 
} 

int main(void) 
{ 
    int32_t x = 9999; 

    printf("sqr(%d) = %d, sqrf(%d) = %f\n", x, sqr(x), x, sqrf(x)); 
    return 0; 
} 

編譯並運行:

$ gcc -Wall int_float_prec.c && ./a.out 
sqr(9999) = 99980001, sqrf(9999) = 99980000.000000 
0

演員漂浮傳遞給函數

int32_t i=32; 

func((double) i);