I'm only allowed to use the <iostream> library, so setprecision can't be used. How can I set 2 decimal places for the average?
1 2 3
|
average = sum/(double)n;
cout << "Average = "<<average << endl;
|
Last edited on
1 2
|
int ipart = (int)(average * 100);
average = ipart / 100.0;
|
//now has 2 decimal places. but it will still print zeros. If you want to get rid of the zeros you can either
convert it to text and take a substring, find the decimal point and take 2 more characters.
or do a messy decimal to 2 integer + custom print statement (let me know if you want this one).
I thought fmod might offer a cool answer but maybe not (anyone?).
also try this gem:
cout << average << "\b\b\b" << " " << endl;
//back up 3 characters and overwrite with 3 spaces...
Last edited on
Er,
1 2 3 4
|
double pi = 3.1415926;
std::cout << "whole part: " << (int)pi << "\n";
std::cout << "fractional part: " << (int)((pi - (int)pi) * 100) << "\n";
|
while part: 3
fractional part: 14 |
Make yourself a function.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
#include <iostream>
std::ostream& print( std::ostream& outs, double x )
{
return outs
<< (int)x << "."
<< (int)((x - (int)x) * 100);
}
int main()
{
double pi = 3.1415926;
print( std::cout, pi ) << "\n";
}
|
Write your own manipulator.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#include <iostream>
struct myprec2
{
double x;
myprec2( double x ): x(x) { }
};
std::ostream& operator << ( std::ostream& outs, const myprec2& p )
{
return outs
<< (int)p.x << "."
<< (int)((p.x - (int)p.x) * 100);
}
int main()
{
double pi = 3.1415926;
std::cout << myprec2( pi ) << "\n";
}
|
Etc.
[
edit]
I forgot something important -- leading zeros. See below.
Last edited on
I started to do a simpler version of that but
100.01
becomes
100 and 1 integer parts
and prints 100.1
so you have to handle that aggravation.
I think all you need is
if ( (int)val - val < 10)
cout <<'0' ; //insert extra zero padding.
Last edited on