use*_*460 7 c++ double int casting
我有以下代码投入double到int:
double dblValue = 7.30;
int intValue = (int)(dblValue*100); //I want intValue to store extactly 730;
cout << intValue;
Run Code Online (Sandbox Code Playgroud)
输出: 729
I know that the compiler is reading dblValue as 7.2999999 before casting it to int.
Run Code Online (Sandbox Code Playgroud)
我的问题是:是否可以通过防止舍入错误将其强制转换为730?
如果您的解决方案避免使用C++ 11或其他预定义函数,那将是最好的.我在这里使用的唯一预处理器指令是<iostream>.
gha*_*.st 19
将非整数(在数学意义上)的数字转换为整数时,无法阻止舍入错误,您唯一能做的就是尝试实现正确的舍入.
实现合理(尽管不完美)舍入的最简单方法如下:
int intValue = (int)(dblValue < 0 ? dblValue - 0.5 : dblValue + 0.5);
Run Code Online (Sandbox Code Playgroud)
当然,既然你的问题都被标记了c++,casting我无法抗拒用c ++风格的演员代替你的c风格演员:
int intValue = static_cast<int>(dblValue < 0 ? dblValue - 0.5 : dblValue + 0.5);
Run Code Online (Sandbox Code Playgroud)
这不是任何类型的错误,而是计算机存储浮点值的方式。你可以这样做:
int intValue = (int)(dblValue*100 + 0.00001);
Run Code Online (Sandbox Code Playgroud)