作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个 double(称为 x),本来是 55,但实际上存储为 54.999999999999943157,这是我刚刚意识到的。
所以当我这样做时
double x = 54.999999999999943157;
int y = (int) x;
y = 54 而不是 55!
这让我困惑了很久。我怎样才能让它正确地四舍五入?
最佳答案
在转换前加 0.5(如果 x > 0)或减去 0.5(如果 x < 0),因为编译器总是会截断。
float x = 55; // stored as 54.999999...
x = x + 0.5 - (x<0); // x is now 55.499999...
int y = (int)x; // truncated to 55
C++11 还引入了std::round ,这可能使用了将 0.5 添加到 |x| 的类似逻辑在引擎盖下(如果有兴趣,请参阅链接),但显然更强大。
一个后续问题可能是为什么 float 没有准确存储为 55。有关解释,请参阅 this堆栈溢出答案。
关于C++:如何将 double 舍入为 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9695329/
我是一名优秀的程序员,十分优秀!