我使用 C (不是C ++)。
我需要将一个浮点数转换为int
。我不想舍入到最接近的数字,我只是想消除整数部分之后的内容。像
4.9 -> 4.9-> 4
答案 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
在我尝试过的一种特殊情况下。