lwx*_*ted 2 c c++ floating-point double int
我正在对小数点输入执行加法和减法,精确到小数点后第二位.我试图通过乘以100将它们转换为整数来提高准确度,但却达到了相反的效果.
请考虑以下代码和输出:
double d = 2.01;
int a = (int) (d * 100.0);
cout << a << endl;
Run Code Online (Sandbox Code Playgroud)
输出是:
200
Run Code Online (Sandbox Code Playgroud)
一劳永逸,关于浮点算术的一些最佳实践是什么?首先使用上面代码的某些变体将其转换double为int使用然后再将它转换回来是否可行?
如果打印出d*100.0(比方说)20位小数的结果,问题将很快变得明显:
200.99999999999997
Run Code Online (Sandbox Code Playgroud)
由于那个(非常精细)小于201,所以当你施展时它会被截断为200 int.
显而易见的解决方法是强制四舍五入.至少如果你的输入都是正数,那么就像在结果中加0.5一样简单:
int a = (int)(d*100.0 + 0.5);
Run Code Online (Sandbox Code Playgroud)
如果你可以指望你的编译器支持它,那么使用标准库会更容易round:
long a = lround(d*100.0);
Run Code Online (Sandbox Code Playgroud)
这适用于正数和负数.
| 归档时间: |
|
| 查看次数: |
872 次 |
| 最近记录: |