8

我使用以下方法将我的值四舍五入到小数点后 2 位:

 x = floor(num*100+0.5)/100;

这似乎工作正常;除了像“16.60”这样的值,即“16.6”。

我想像“16.60”一样输出这个值。

我输出值的方式如下:

cout setw(12) << round(payment);

我尝试了以下方法:

cout setw(12) << setprecision(2) << round(payment);

但这给了我这样的答案

1.2e+02

如何正确输出值?

4

3 回答 3

20

这是因为std::setprecision如果您不将浮点格式更改为使用小数点后的固定位数,则不会设置小数点后的数字而是有效数字。要更改格式,您必须将std::fixed放入输出流中:

double a = 16.6;
std::cout << std::fixed << std::setprecision(2) << a << std::endl;
于 2013-01-30T03:37:19.497 回答
11

您可以使用 printf / sprintf 或其他类似功能。以下代码将浮点值格式化为小数点后两位。有关更多格式信息,请参阅 printf 手册

float f = 1.234567
printf("%.2f\n", f);
于 2013-01-30T03:36:36.757 回答
3

来自 Trevor Boyd Smith 的评论:

如果您对 printf 和朋友过敏,#include <boost/format.hpp>那么您可以使用类型安全的 C++ 版本来执行以下操作:

float f = 1.234567;
cout << boost::format("%.2f") % f << endl;
于 2015-04-26T03:02:18.603 回答