可能重复:
round() for float in C++
我有一个双(称之为x),意思是55但实际存储为54.999999999999943157,我刚才意识到。
所以当我做的时候
double x = 54.999999999999943157;
int y = (int) x;
y = 54而不是55!
这让我困惑了很久。如何让它正确圆?
答案 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;
}