Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 3371
  • Last Modified:

[noob][c++] cout + float + precision

I am trying to do this



#include <iostream>
#include <iomanip>

//
// if I can adjust the float things then it can be used
//


using namespace std;

int main()
{
      float date;
      date = 12003932;
      cout << setprecision ( 11 ) << date << endl;
      cout << date << endl;
      cout << (date/10000) << endl;
      date = ((date/10000) + 1 ) * 10000;
      
      cout << date << endl;
      
      return 0;
      
}




this is the output




12003932
12003932
1200.3931885
12013932




for some reason this pops up


1200.3931885


when it shouldn't.


how do I fix it?
0
Troudeloup
Asked:
Troudeloup
  • 4
  • 4
  • 2
6 Solutions
 
Jaime OlivaresCommented:
floating numbers are not stored as decimals, indeed them are stored in inverse of the powers of 2, as explained here:
http://en.wikipedia.org/wiki/IEEE_754

So unless you control the display precision by yourself you will have thos unexpected result, try with:
cout << setprecision(4) << (date/10000) << endl;
     
0
 
ozoCommented:
setprecision ( 8 )
or what do you want to happen?
0
 
TroudeloupAuthor Commented:
i just want cout to display the whole float exactly what they are.
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
Jaime OlivaresCommented:
setprecision(4) will show "as you expected", but the number is really 1200.3931885
0
 
ozoCommented:
The exact value, depending on your float implementation, is probably something like
1200.3931884765625
With a double, you could increase the precision to
1200.39319999999997889972291886806488037109375
0
 
ozoCommented:
Or you could use int date, and get exactly
12003932
12003932
1200
12010000
0
 
TroudeloupAuthor Commented:
ok,

float a;

a = 12002323;


cout << a << endl;

should say

1.2002323e7

and

cout << a/10000 << endl;

should say

1.2002323e3





does it work simply like that?


because if the number would change unexpectedly to something else...



0
 
TroudeloupAuthor Commented:
i need to go into decimal values, so I think i can use only float
0
 
ozoCommented:
<< scientific << setprecision ( 8 )
0
 
TroudeloupAuthor Commented:
nice.

can I display float like this


12003939

instead of


1.2003939


?
0

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

  • 4
  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now