Opie-M - 8 months ago 51
C++ Question

# Making average of 3 numbers with 2 decimals (no rounding!)

This has been on my mind for a week now and i can't seem to understand it.
i have this problem:

``````//1.Make an average of 3 numbers
//2.Display average with two decimals exactly
//3.Average must NOT be rounded

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
double x, y ,z, average;
cin>> x >> y >> z;
average = (x+y+z)/3;

cout<<setprecision(2)<<fixed<< average;

return (0);
}
``````

This is what i came up with but apparently it doesn't work 100%. (it rounds up the average sometimes)

Can anyone explain where it fails and how i can fix it?

It's a matter of definition and specification. The division `(x+y+z)/3` is a floating-point one and `setprecision()` obviously rounds the decimal digits, rather than truncates them. You may need to either choose another function (truncating, rather than rounding), or even partially employ a fixed-point logic. Eg if x, y and z are integers, you could use `((x+y+z)*100/3) / 100.0`. (a quite common approach when 'amount' data are represented and processed).
``````floor((x+y+z)*100/3)/100