Решение немного длинное, но оно будет работать. Вот код, содержит три примера ...
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
int main()
{
double a = 12.01;
double b = 23.000;
double c = 15.40;
//Example 1
if ( a - floor(a) == 0 )
{
cout.precision(0);
cout << fixed << a << endl;
}
else if ( (a*10) - floor((a*10)) == 0 )
{
cout.precision(1);
cout << fixed << a << endl;
}
else
{
cout.precision(2);
cout << fixed << a << endl;
}
//Example 2
if ( b - floor(b) == 0 )
{
cout.precision(0);
cout << fixed << b << endl;
}
else if ( (b*10) - floor((b*10)) == 0 )
{
cout.precision(1);
cout << fixed << b << endl;
}
else
{
cout.precision(2);
cout << fixed << b << endl;
}
//Example 3
if ( c - floor(c) == 0 )
{
cout.precision(0);
cout << fixed << c << endl;
}
else if ( (c*10) - floor((c*10)) == 0 )
{
cout.precision(1);
cout << fixed << c << endl;
}
else
{
cout.precision(2);
cout << fixed << c << endl;
}
}
А вот вывод ...
12.01
23
15.4
Чтобы сделать все это немного приятнее и удобнее для вашего кода сделать метод, который принимает в двойном и печатает правильное значение. Это уменьшит количество операторов if else в вашем коде. Вот так ...
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
//You can use this function to replace duplicate code
void printDouble( double numToPrint)
{
if ( numToPrint - floor(numToPrint) == 0 )
{
cout.precision(0);
cout << fixed << numToPrint;
}
else if ( (numToPrint*10) - floor((numToPrint*10)) == 0 )
{
cout.precision(1);
cout << fixed << numToPrint;
}
else
{
cout.precision(2);
cout << fixed << numToPrint;
}
}
int main()
{
double a = 12.40000;
double b = 56.053;
double c = 43.67;
double d = 34.70;
double e = 98.00;
cout << "doubles are: ";
printDouble(a);
cout << ", ";
printDouble(b);
cout << ", ";
printDouble(c);
cout << ", ";
printDouble(d);
cout << ", ";
printDouble(e);
cout << endl;
}
Вывод ...
doubles are: 12.4, 56.05, 43.67, 34.7, 98