繁体   English   中英

C将浮点数转换为int

[英]C convert floating point to int

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

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

4.9 -> 4
 

 
 
 
  
  
  
 
  .9
 

 
 
  -> 4
my_var = (int)my_var;

就如此容易。 如果变量是int,基本上你不需要它。

在 C 中使用

int C = var_in_float;

他们将转换隐式

如果你想把它四舍五入到更低,就投吧。

float my_float = 42.8f;
int my_int;
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

小心,理想情况下,您应该在转换之前验证浮点数介于 INT_MIN 和 INT_MAX 之间。

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?

好客! - 在我还没有为我的案例找到令人满意的答案的地方,我在这里提供的答案对我有用,但可能不是未来的证明......

如果使用 gcc(clang?)并定义了-WerrorWbad-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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM