Reputation: 9473
I have a list of float
values and I want to print them with cout
with 2 decimal places.
For example:
How can I do this?
(setprecision
doesn't seem to help in this.)
Upvotes: 227
Views: 862625
Reputation: 55524
In C++20 you can use std::format
to do this:
std::cout << std::format("{:.2f}", 10.900);
Output:
10.90
It is less verbose and more efficient than using I/O manipulators. It also gives you control over locale with the default being locale-independent.
Disclaimer: I'm the author of C++20 std::format
.
Upvotes: 6
Reputation: 169
Easiest way:
#include<stdio.h>
int main() {
double d = 122.345;
printf(".2%lf",d);
}
Upvotes: -1
Reputation: 61
#include <iostream>
#include <cstdio>
#include <iomanip>
using namespace std;
int main() {
int a;
long int b;
char c;
float d;
double e;
cin>>a>>b>>c>>d>>e;
cout<<a<<"\n"<<b<<"\n"<<c<<"\n";
cout<<fixed<<setprecision(3)<<d<<"\n";
cout<<fixed<<setprecision(9)<<e;
return 0;
}
Simple code would help you surely!
Upvotes: 2
Reputation: 3077
with templates
#include <iostream>
// d = decimal places
template<int d>
std::ostream& fixed(std::ostream& os){
os.setf(std::ios_base::fixed, std::ios_base::floatfield);
os.precision(d);
return os;
}
int main(){
double d = 122.345;
std::cout << fixed<2> << d;
}
similar for scientific as well, with a width option also (useful for columns)
// d = decimal places
template<int d>
std::ostream& f(std::ostream &os){
os.setf(std::ios_base::fixed, std::ios_base::floatfield);
os.precision(d);
return os;
}
// w = width, d = decimal places
template<int w, int d>
std::ostream& f(std::ostream &os){
os.setf(std::ios_base::fixed, std::ios_base::floatfield);
os.precision(d);
os.width(w);
return os;
}
// d = decimal places
template<int d>
std::ostream& e(std::ostream &os){
os.setf(std::ios_base::scientific, std::ios_base::floatfield);
os.precision(d);
return os;
}
// w = width, d = decimal places
template<int w, int d>
std::ostream& e(std::ostream &os){
os.setf(std::ios_base::scientific, std::ios_base::floatfield);
os.precision(d);
os.width(w);
return os;
}
int main(){
double d = 122.345;
std::cout << f<10,2> << d << '\n'
<< e<10,2> << d << '\n';
}
Upvotes: 2
Reputation: 576
I had this similar problem in a coding competition and this is how I handled it. Setting a precision of 2 to all double values
First adding the header to use setprecision
#include <iomanip>
Then adding the following code in our main
double answer=5.9999;
double answer2=5.0000;
cout<<setprecision(2)<<fixed;
cout <<answer << endl;
cout <<answer2 << endl;
Output:
5.99
5.00
You need to use fixed for writing 5.00 thats why,your output won't come for 5.00.
A short reference video link I'm adding which is helpful
Upvotes: 8
Reputation: 109
#include<stdio.h>
int main()
{
double d=15.6464545347;
printf("%0.2lf",d);
}
Upvotes: 9
Reputation: 2459
To set fixed 2 digits after the decimal point use these first:
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
Then print your double values.
This is an example:
#include <iostream>
using std::cout;
using std::ios;
using std::endl;
int main(int argc, char *argv[]) {
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
double d = 10.90;
cout << d << endl;
return 0;
}
Upvotes: 3
Reputation: 25
this an example using a matrix.
cout<<setprecision(4)<<fixed<<m[i][j]
Upvotes: -5
Reputation: 8253
With <iomanip>
, you can use std::fixed
and std::setprecision
Here is an example
#include <iostream>
#include <iomanip>
int main()
{
double d = 122.345;
std::cout << std::fixed;
std::cout << std::setprecision(2);
std::cout << d;
}
And you will get output
122.34
Upvotes: 333
Reputation: 6682
Simplify the accepted answer
Simplified example:
#include <iostream>
#include <iomanip>
int main()
{
double d = 122.345;
std::cout << std::fixed << std::setprecision(2) << d;
}
And you will get output
122.34
Reference:
Upvotes: 20
Reputation: 14505
You have to set the 'float mode' to fixed.
float num = 15.839;
// this will output 15.84
std::cout << std::fixed << "num = " << std::setprecision(2) << num << std::endl;
Upvotes: 1
Reputation: 1470
You were nearly there, need to use std::fixed as well, refer http://www.cplusplus.com/reference/iostream/manipulators/fixed/
#include <iostream>
#include <iomanip>
int main(int argc, char** argv)
{
float testme[] = { 0.12345, 1.2345, 12.345, 123.45, 1234.5, 12345 };
std::cout << std::setprecision(2) << std::fixed;
for(int i = 0; i < 6; ++i)
{
std::cout << testme[i] << std::endl;
}
return 0;
}
outputs:
0.12
1.23
12.35
123.45
1234.50
12345.00
Upvotes: 64
Reputation: 13946
setprecision(n)
applies to the entire number, not the fractional part. You need to use the fixed-point format to make it apply to the fractional part: setiosflags(ios::fixed)
Upvotes: 22