我有以下代码将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);