Hello, I have been having a problem with the following code:

``````#include<iostream>
#include<time.h>
#include<iomanip>
using namespace std;
int main()
{
float average;
setprecision(5);
fixed;
average = 100-((25/(130-(50-(130/3))))*100);
cout << average << "\n\n";
}``````

I cannot seem to get the 'average' variable to come out to exactly 79.73 like it should. I have tested out the 'setprecision/fixed' functions, yet the program still produces 100.

Any help is appreciated.

2
Contributors
2
Replies
3
Views
8 Years
Discussion Span
Last Post by restrictment

Thats because you are doing int arithmatic. Basically :

130/3 = 43
130.0/3.0 = 43.333333...

So to solve your problem, and to be safe, put a .0 at the end of each numbers. So in total it will look like this :

``average = float(100.0-((25.0/(130.0-(50.0-(130.0/3.0))))*100.0) );``

The float(...) is a cast so the compiler does not give warnings.
Alternatively, you could put a .0f at the end of each number and not do the cast.

Edited by firstPerson: n/a

Thats because you are doing int arithmatic. Basically :

130/3 = 43
130.0/3.0 = 43.333333...

So to solve your problem, and to be safe, put a .0 at the end of each numbers. So in total it will look like this :

``average = float(100.0-((25.0/(130.0-(50.0-(130.0/3.0))))*100.0) );``

The float(...) is a cast so the compiler does not give warnings.
Alternatively, you could put a .0f at the end of each number and not do the cast.

Ah, okay. Thanks. That helped a lot. =]

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.