我已经看到很多关于从float转换为int32_T的问题,但没有一个解决将int32_t转换为float的问题。
我正在使用的数据以厘米为单位。所以我只想确认,如果我尝试将它们转换为浮点数,就不会有任何类型转换问题。
我对此转换感兴趣的原因是我使用的函数仅适用于浮点数。因此,如果我传递函数int32_t并且它期望浮点数,它会自动对我的参数进行类型转换吗?
答案 0 :(得分:5)
如果将int32_t
传递给按值float
参数的函数,则会有隐式强制转换(类型转换)。但需要注意的是,IEEE754单精度float
的精度低于32位int(精度约为24位,而int32_t
则为32位),因此如果你有一定的精度,你可能会失去一些准确性。 '使用大值。
示例:
#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
答案 1 :(得分:0)
在传递给函数之前强制转换为浮动
int32_t i=32;
func((double) i);