Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make C++ cout not use scientific notation

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?

like image 379
Yunus Eren Güzel Avatar asked Mar 06 '11 17:03

Yunus Eren Güzel


People also ask

How do I turn off scientific notation in C ++?

you need to write: cout<< fixed; cout<< setprecision(2)<< f; fixed disables the scientific notation i.e. 1.23e+006.... and fixed is a sticky manipulator so u need to disable it if u want to revert back to scientific notation...

How do you cancel scientific notation?

(1) Right-click a cell where you want to remove scientific notation, and (2) choose Format Cells… 2. In the Format Cells window, (1) select the Number category, (2) set the number of decimal places to 0, and (3) click OK. Now the scientific notation is removed.

How do you stop scientific notation when printing float values?

There is a simple technique to suppress scientific notation when using float values by using the %f flag in string. This will convert the number into a floating-point number and then print it.


2 Answers

Use std::fixed stream manipulator:

cout<<fixed<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl; 
like image 59
Tugrul Ates Avatar answered Sep 21 '22 02:09

Tugrul Ates


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.

like image 30
Migi Avatar answered Sep 22 '22 02:09

Migi