相关疑难解决方法(0)

C++:如何将double舍入到int?

可能重复:
C++中float的round()

我有一个双(称为x),意味着55,但实际存储为54.999999999999943157,我刚才意识到.

所以,当我这样做

double x = 54.999999999999943157;
int y = (int) x;
Run Code Online (Sandbox Code Playgroud)

y = 54而不是55!

这困惑了我很久了.如何让它正确圆?

c++ floating-point rounding

88
推荐指数
4
解决办法
34万
查看次数

C将浮点数转换为int

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

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

4.9 -> 4.9 -> 4

c floating-point int casting type-conversion

17
推荐指数
4
解决办法
8万
查看次数

将float浮动到int,32位C的区别

我目前正在使用需要运行32位系统的旧代码.在这项工作中,我偶然发现了一个问题(出于学术兴趣),我想了解其原因.

如果对变量或表达式进行强制转换,似乎在32位C中从float转换为int的行为会有所不同.考虑该计划:

#include <stdio.h>
int main() {
   int i,c1,c2;
   float f1,f10;
   for (i=0; i< 21; i++)  {
      f1 = 3+i*0.1;
      f10 = f1*10.0;
      c1 = (int)f10;
      c2 = (int)(f1*10.0);
      printf("%d, %d, %d, %11.9f, %11.9f\n",c1,c2,c1-c2,f10,f1*10.0);
   }
}
Run Code Online (Sandbox Code Playgroud)

使用-m32修饰符直接在32位系统或64位系统上编译(使用gcc),程序的输出为:

30, 30, 0, 30.000000000 30.000000000
31, 30, 1, 31.000000000 30.999999046
32, 32, 0, 32.000000000 32.000000477
33, 32, 1, 33.000000000 32.999999523
34, 34, 0, 34.000000000 34.000000954
35, 35, 0, 35.000000000 35.000000000
36, 35, 1, 36.000000000 35.999999046
37, 37, 0, 37.000000000 37.000000477
38, …
Run Code Online (Sandbox Code Playgroud)

c casting 32-bit

11
推荐指数
2
解决办法
813
查看次数

标签 统计

c ×2

casting ×2

floating-point ×2

32-bit ×1

c++ ×1

int ×1

rounding ×1

type-conversion ×1