C++ 中的浮点格式
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/14432043/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Float formatting in C++
提问by eveo
How do you format a float in C++ to output to two decimal places rounded up? I'm having no luck with setw
and setprecision
as my compiler just tells me they are not defined
.
如何在 C++ 中格式化浮点数以输出到四舍五入的两位小数?我有没有运气setw
,并setprecision
为我的编译器只是告诉我,他们是not defined
。
cout << "Total : " << setw(2) << total << endl;
cout << "Total : " << setw(2) << total << endl;
total outputs: Total : 12.3961
总产出: Total : 12.3961
I'd like it to be: 12.40
or 12.39
if it's too much work to round up.
我希望它是:12.40
或者12.39
如果它的工作太多而无法收集。
采纳答案by billz
You need to include <iomanip>
and provide namespace scope to setw and setprecision
您需要包含<iomanip>
并提供命名空间范围setw and setprecision
#include <iomanip>
std::setw(2)
std::setprecision(5)
try:
尝试:
cout.precision(5);
cout << "Total : " << setw(4) << floor(total*100)/100 << endl;
or
或者
cout << "Total : " << setw(4) << ceil(total*10)/10 << endl;
iostream provides precision function, but to use setw, you may need to include extra header file.
iostream 提供了精度函数,但是要使用 setw,您可能需要包含额外的头文件。
回答by Jon Spencer
Use cout << fixed
or cout.setf(ios::fixed)
, and std::cout.precision(<# of decimal digits>)
as in the following (using the Clang-503.0.40 compiler included with OSX Mavericks):
使用cout << fixed
或cout.setf(ios::fixed)
,和std::cout.precision(<# of decimal digits>)
如下所示(使用 OSX Mavericks 附带的 Clang-503.0.40 编译器):
#include <iostream>
int main()
{
using namespace std;
float loge = 2.718;
double fake = 1234567.818;
cout << fixed;
cout.precision(2);
cout << "loge(2) = " << loge << endl;
cout << "fake(2) = " << fake << endl;
cout.precision(3);
cout << "loge(3) = " << loge << endl;
cout << "fake(3) = " << fake << endl;
}
The output from this is (note the rounding):
这个输出是(注意四舍五入):
loge(2) = 2.72
fake(2) = 1234567.82
loge(3) = 2.718
fake(3) = 1234567.818
This is the simple version. In lieu of using cout << fixed;
, you can use cout.setf(ios::fixed);
(for displaying scientific notation, replace fixedwith scientific; both will set the number of digits to the right of the decimal point). Note the cout.precision() is also used to set the number of digits displayed in total on either side of the decimal point if the format flags do not include fixedor scientific. There are tutorials for this on the Internet.
这是简单的版本。代替 using cout << fixed;
,您可以使用cout.setf(ios::fixed);
(用于显示科学记数法,用科学代替fixed;两者都将设置小数点右侧的位数)。注意cout.precision()也被用来设定的,如果格式标志不包括在小数点的任一侧显示在总位数的数目固定的或科学。网上有这方面的教程。
回答by leemes
To also include the trailing zero, it isn't sufficient to set the precision. You also have to change the floating point format to fixedformat, which uses the number of digits as told by setprecision
as the number of digits after the decimal point:
要还包括尾随零,设置精度是不够的。您还可以浮点格式更改为固定格式,它采用的位数由告诉setprecision
的位数小数点后:
std::cout << std::fixed << std::setprecision(2) << v;
回答by Rapptz
If you want the trailing zero from rounding, you can use the C function printf
.
如果您想要四舍五入的尾随零,您可以使用 C 函数printf
。
#include <iostream>
#include <cstdio>
int main() {
float v = 12.3961;
std::printf("%.2f",v); //prints 12.40
}
Compared to:
相比:
#include <iostream>
#include <iomanip>
int main() {
float v = 12.3961;
std::cout << std::setprecision(4) << v; //prints 12.4
}