舍入到2个小数点

ave*_*123 6 c++ double decimal

我使用以下内容将我的值舍入为2小数点:

 x = floor(num*100+0.5)/100;
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常; 除了"16.60"之类的值,即"16.6".

我想输出这个值,如"16.60".

我输出值的方式如下:

cout setw(12) << round(payment);
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

cout setw(12) << setprecision(2) << round(payment);
Run Code Online (Sandbox Code Playgroud)

但这给了我一些答案

1.2e+02
Run Code Online (Sandbox Code Playgroud)

如何正确输出值?

bil*_*llz 19

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

double a = 16.6;
std::cout << std::fixed << std::setprecision(2) << a << std::endl;
Run Code Online (Sandbox Code Playgroud)


ger*_*tan 10

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

float f = 1.234567
printf("%.2f\n", f);
Run Code Online (Sandbox Code Playgroud)

  • 如果你对printf和朋友过敏,你可以使用`#include <boost/format.hpp>`中的类型安全的C++版本:`float f = 1.234567; cout << boost :: format("%.2f",f)<< endl;` (2认同)