问题
double x = 1500;
for(int k = 0; k<10 ; k++){
double t = 0;
for(int i=0; i<12; i++){
t += x * 0.0675;
x += x * 0.0675;
}
cout<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl;
}
this the output
Bas ana: 3284.78 Son faiz: 1784.78 Son ana: 5069.55
Bas ana: 7193.17 Son faiz: 3908.4 Son ana: 11101.6
Bas ana: 15752 Son faiz: 8558.8 Son ana: 24310.8
Bas ana: 34494.5 Son faiz: 18742.5 Son ana: 53237
Bas ana: 75537.8 Son faiz: 41043.3 Son ana: 116581
Bas ana: 165417 Son faiz: 89878.7 Son ana: 255295
Bas ana: 362238 Son faiz: 196821 Son ana: 559059
Bas ana: 793246 Son faiz: 431009 Son ana: 1.22426e+006
Bas ana: 1.73709e+006 Son faiz: 943845 Son ana: 2.68094e+006
Bas ana: 3.80397e+006 Son faiz: 2.06688e+006 Son ana: 5.87085e+006
I want numbers to be shown with exact numbers not scientific numbers. How can I do this?
回答1:
Use std::fixed stream manipulator:
cout<<fixed<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl;
回答2:
As mentioned above, you can use std::fixed
to solve your problem, like this:
cout << fixed;
cout << "Bas ana: " << x << "\tSon faiz: " << t << "\tSon ana: " << x+t <<endl;
However, after you've done this, every time you print a float
or a double
anywhere in your project, the number will still be printed in this fixed notation. You could turn it back by using
cout << scientific;
but this might become tedious if your code gets more complicated.
This is why Boost made the I/O Stream State Saver, which automatically returns the I/O stream you're using to the state it was before your function call. You can use it like this:
#include <boost/io/ios_state.hpp> // you need to download these headers first
{
boost::io::ios_flags_saver ifs( os );
cout << ios::fixed;
cout<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl;
} // at this bracket, when ifs goes "out of scope", your stream is reset
You can find more info about Boost's I/O Stream State Saver in the official docs.
You may also want to check out the Boost Format library which can also make your outputting easier, especially if you have to deal with internationalisation. However, it won't help you for this particular problem.
回答3:
code the next syntax:
std::cout << std::fixed << std::setprecision(n);
where (n)
is the number of decimal precision.
This should fix it.
回答4:
You can use format flags
More info: http://www.cplusplus.com/reference/iostream/ios_base/fmtflags/
回答5:
There are a whole collection of formatting operators that you get with iostream. Here's a tutorial to get you started.
回答6:
You can use the function fixed in this way :
std::cout << std::fixed << ...
Or you can use the the printf function with a standard format like "12.12%f" in this way :
printf ("number = %12.12f", float_number);
来源:https://stackoverflow.com/questions/5212018/how-to-make-c-cout-not-use-scientific-notation