C 将浮点数转换为整数

问题描述 投票:0回答:5

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

我需要将浮点数转换为

int
。我不想四舍五入到最接近的数字,我只是想消除整数部分后面的内容。类似的东西

4.9 -> 4.9 -> 4
c casting floating-point int type-conversion
5个回答
80
投票
my_var = (int)my_var;

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


17
投票

在C中使用

int C = var_in_float;

他们会隐式转换


15
投票

如果您想截断(即,将正值舍入为较低值,将负值舍入为较高值),只需进行强制转换即可。

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

出于其他目的,如果你想将其四舍五入到最接近的值,你可以做一个小函数或像这样的定义:

#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 = FLOAT_TO_INT(my_float); // => my_int=43
my_float = -42.8f;
my_int = FLOAT_TO_INT(my_float);  // => my_int=-43
my_float = 42.2f;
my_int = FLOAT_TO_INT(my_float);  // => my_int=42
my_float = -42.2f;
my_int = FLOAT_TO_INT(my_float);  // => my_int=-42

请小心,理想情况下您应该在投射之前验证浮动是否在 INT_MIN 和 INT_MAX 之间。


6
投票
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?


0
投票

好客! ——我还没有为我的案件找到满意的答案, 我在这里提供的答案对我有用,但可能无法证明未来......

如果使用 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]

(出于充分的理由,需要考虑溢出和值舍入的情况)

编辑:2020-08-30:所以,我的用例将返回 double 的函数的值转换为 int,并选择 pow() 来表示该值 某处的私有函数。然后我更多地回避了 pow() 的思考。 (请参阅更多评论,了解为什么下面使用的 pow() 可能会出现问题......)。

经过深思熟虑(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

在一个特定的情况下我尝试过。

© www.soinside.com 2019 - 2024. All rights reserved.