[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 3376
  • 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 OlivaresSoftware ArchitectCommented:
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
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
Jaime OlivaresSoftware ArchitectCommented:
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

[Webinar] Kill tickets & tabs using PowerShell

Are you tired of cycling through the same browser tabs everyday to close the same repetitive tickets? In this webinar JumpCloud will show how you can leverage RESTful APIs to build your own PowerShell modules to kill tickets & tabs using the PowerShell command Invoke-RestMethod.

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