C将浮点数转换为int

时间:2014-07-13 13:28:02

标签: c casting floating-point int type-conversion

我使用 C (不是C ++)。

我需要将一个浮点数转换为int。我不想舍入到最接近的数字,我只是想消除整数部分之后的内容。像

这样的东西
4.9 -> 4.9 -> 4

5 个答案:

答案 0 :(得分:25)

my_var = (int)my_var;

就这么简单。 如果变量是int,基本上你不需要它。

答案 1 :(得分:5)

在C中使用

int C = var_in_float;

他们将转换隐式

谢谢

答案 2 :(得分:3)

如果要四舍五入,可以创建一个小函数或这样的定义:

#define FLOAT_TO_INT(x) ((x)>=0?(int)((x)+0.5):(int)((x)-0.5))

float my_float = 42.8f;
int my_int;
my_int = (int)my_float;          // => my_int=42;
my_int = FLOAT_TO_INT(my_float); // => my_int=43;

请注意,理想情况下,在进行浮点运算之前,应先验证浮点在INT_MIN和INT_MAX之间。

答案 3 :(得分:1)

double a = 100.3;
printf("%f %d\n", a, (int)(a* 10.0));

Output Cygwin 100.3 1003
Output MinGW: 100.3 1002

使用(int)将double转换为int似乎并不安全

您可以在此处找到更多相关信息:Convert double to int?

答案 4 :(得分:1)

您好! -如果我尚未找到满意的答案, 我在这里提供的答案对我有用,但可能无法证明未来...

如果使用gcc(clang?)并定义了-Werror和-Wbad-function-cast

int val = (int)pow(10,9);

将得到:

error: cast from function call of type 'double' to non-matching type 'int' [-Werror=bad-function-cast]

(出于充分的原因,需要考虑溢出和取整值的地方)

经过深思熟虑(pow()的参数很好)之后,int val = pow(10,9);似乎可以用于gcc 9.2 x86-64 ...

但请注意:

printf("%d\n", pow(10,4));

可能会输出例如

-1121380856

(对我有用)在哪里

int i = pow(10,4); printf("%d\n", i);

打印

10000

在我尝试过的一种特殊情况下。