Mei*_*eir 9 c++ printf rounding
我正在使用以下代码舍入到2dp:
sprintf(temp,"%.2f",coef[i]); //coef[i] returns a double
Run Code Online (Sandbox Code Playgroud)
它成功地将6.666舍入到6.67,但在舍入5.555时它无法正常工作.它返回5.55,而它应该(至少在我看来)返回5.56.
当下一个数字是5时,我怎样才能将它弄圆?即返回5.56.
编辑:我现在意识到这种情况正在发生,因为当我用cin输入5.555时它会被保存为5.554999997.
我将尝试分两个阶段 - 首先是3dp然后是2dp.还有其他(更优雅)的想法吗?
ypn*_*nos 11
看来你必须使用数学轮函数来进行正确的舍入.
printf("%.2f %.2f\n", 5.555, round(5.555 * 100.)/100.);
Run Code Online (Sandbox Code Playgroud)
这会在我的机器上提供以下输出:
5.55 5.56
Run Code Online (Sandbox Code Playgroud)
pax*_*blo 11
该数字5.555不能表示为IEEE754中的确切数字.打印出常量5.555,"%.50f"结果如下:
5.55499999999999971578290569595992565155029300000000
Run Code Online (Sandbox Code Playgroud)
所以它会被舍去.请尝试使用此代码:
printf ("%.2f\n",x+0.0005);
Run Code Online (Sandbox Code Playgroud)
虽然你需要注意可以精确表示的数字,因为它们会被这个表达式错误地四舍五入.
您需要了解浮点表示的局限性.如果获得准确性很重要,则可以使用(或编码)没有IEEE754表示缺点的BCD或其他十进制类.