我有以下代码将double转换为int:

double dblValue = 7.30;
int intValue = (int)(dblValue*100);  //I want intValue to store exactly 730;
std::cout << intValue;

输出:729

我知道编译器在将dblValue转换为7.2999999之前将int读取为730

我的问题是:可以通过防止舍入错误将其转换为<iostream>吗?

最好的解决方案是避免使用C++ 11或其他预定义函数。我在这里使用的唯一预处理器指令是ojit_code。

最佳答案

将非整数(从数学意义上来说)转换为整数时,您无法防止舍入错误,您唯一可以做的就是尝试实现正确的舍入。

进行合理的(尽管不是完美的)舍入的最简单方法如下:

int intValue = (int)(dblValue < 0 ? dblValue - 0.5 : dblValue + 0.5);

当然,由于您的问题同时被标记为c++casting,因此我无法抗拒将您的c样式转换替换为c++样式转换:
int intValue = static_cast<int>(dblValue < 0 ? dblValue - 0.5 : dblValue + 0.5);

10-06 02:07