Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
Solved

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

Posted on 2007-11-16
Medium Priority
3,366 Views
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
Question by:Troudeloup
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• Learn & ask questions
• 4
• 4
• 2

LVL 55

Accepted Solution

Jaime Olivares earned 1000 total points
ID: 20299471
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

LVL 84

Assisted Solution

ozo earned 1000 total points
ID: 20300857
setprecision ( 8 )
or what do you want to happen?
0

Author Comment

ID: 20300873
i just want cout to display the whole float exactly what they are.
0

LVL 55

Assisted Solution

Jaime Olivares earned 1000 total points
ID: 20300901
setprecision(4) will show "as you expected", but the number is really 1200.3931885
0

LVL 84

Assisted Solution

ozo earned 1000 total points
ID: 20300925
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

LVL 84

Assisted Solution

ozo earned 1000 total points
ID: 20300968
Or you could use int date, and get exactly
12003932
12003932
1200
12010000
0

Author Comment

ID: 20300980
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

Author Comment

ID: 20300989
i need to go into decimal values, so I think i can use only float
0

LVL 84

Assisted Solution

ozo earned 1000 total points
ID: 20301085
<< scientific << setprecision ( 8 )
0

Author Comment

ID: 20301105
nice.

can I display float like this

12003939

1.2003939

?
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

There is an easy way, in .NET, to centralize the treatment of all unexpected errors. First of all, instead of launching the application directly in a Form, you need first to write a Sub called Main, in a module. Then, set the Startup Object to thâ€¦
How to remove superseded packages in windows w60 or w61 installation media (.wim) or online system to prevent unnecessary space. w60 means Windows Vista or Windows Server 2008. w61 means Windows 7 or Windows Server 2008 R2. There are various â€¦
This video teaches viewers about errors in exception handling.
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
###### Suggested Courses
Course of the Month7 days, 16 hours left to enroll

#### 715 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.