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

时间:2012-03-14 03:01:18

标签: c++ floating-point rounding

  

可能重复:
  round() for float in C++

我有一个双(称之为x),意思是55但实际存储为54.999999999999943157,我刚才意识到。

所以当我做的时候

double x = 54.999999999999943157;
int y = (int) x;

y = 54而不是55!

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

4 个答案:

答案 0 :(得分:43)

投射不是一种数学运算,也不是这样的。尝试

int y = (int)round(x);

答案 1 :(得分:7)

转换为int会截断该值。添加0.5会导致它进行适当的舍入。

int y = (int)(x + 0.5);

答案 2 :(得分:4)

值得注意的是,你所做的不是四舍五入,而是在施展。使用(int) x进行投射会截断x的小数值。如您的示例所示,如果x = 3.9995,则.9995会被截断并x = 3

正如许多其他人所提出的,一种解决方案是将0.5添加到x,然后进行投射。

答案 3 :(得分:-4)

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    double x=54.999999999999943157;
    int y=ceil(x);//The ceil() function returns the smallest integer no less than x
    return 0;
}