Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 四舍五入浮点:精确打印小数点后的两位数字,四舍五入到最接近的小数点_C++_C_Floating Point - Fatal编程技术网

C++ 四舍五入浮点:精确打印小数点后的两位数字,四舍五入到最接近的小数点

C++ 四舍五入浮点:精确打印小数点后的两位数字,四舍五入到最接近的小数点,c++,c,floating-point,C++,C,Floating Point,在C/C++中,如何将浮点数四舍五入,以便在小数点四舍五入到最接近的小数点后正好打印两位数字? 比如说,当我使用 printf("%.2f", 12.555); cout<<fixed<<setprecision(2)<<12.555<<endl; 但我需要输出作为 12.56 12.56 C或C++不关心你需要什么。 12.555不是二进制浮点数。二进制浮点数是所有整数乘以或除以二的幂。12.555不是这样一个数字。所以当你写12.555时

在C/C++中,如何将浮点数四舍五入,以便在小数点四舍五入到最接近的小数点后正好打印两位数字? 比如说,当我使用

printf("%.2f", 12.555);
cout<<fixed<<setprecision(2)<<12.555<<endl;
但我需要输出作为

12.56
12.56

C或C++不关心你需要什么。 12.555不是二进制浮点数。二进制浮点数是所有整数乘以或除以二的幂。12.555不是这样一个数字。所以当你写12.555时,你得到的是最接近12.555的浮点数。其可能小于或大于12.555,并将正确四舍五入至12.55或正确四舍五入至12.56


计算x*1000并取整(x*1000),得到12555。如果x*1000非常接近圆形(x*1000),且圆形(x*1000)的最后一位为奇数,则将其增加1。除以10,再四舍五入,除以100

C或C++不关心你需要什么。 12.555不是二进制浮点数。二进制浮点数是所有整数乘以或除以二的幂。12.555不是这样一个数字。所以当你写12.555时,你得到的是最接近12.555的浮点数。其可能小于或大于12.555,并将正确四舍五入至12.55或正确四舍五入至12.56


计算x*1000并取整(x*1000),得到12555。如果x*1000非常接近圆形(x*1000),且圆形(x*1000)的最后一位为奇数,则将其增加1。除以10,再四舍五入,除以100

问题是12.555的实际双精度值是

12.55499999999999971578290569595992565155029296875000

所以当你把它四舍五入到小数点后2位时,它四舍五入到12.55。对此你真的无能为力。

问题是12.555的实际双精度值是

12.55499999999999971578290569595992565155029296875000

所以当你把它四舍五入到小数点后2位时,它四舍五入到12.55。对此你真的无能为力。

请看@amdixon:没有回答这个问题。Dale Hagglund在那篇文章中的回答给出了将roundf与多应用程序结合使用的解决方案,顺序为10秒(根据小数位数)上面的链接可能会帮助你上面的链接可能会帮助你看到@amdixon:并没有回答这个问题。Dale Hagglund在那篇文章中的回答给出了按10秒的顺序(根据你的小数位数)将roundf与multiplication结合使用的解决方案上面的链接可能会帮助你上面的链接可能会帮助你