Как удалить десятичное значение 0 для некоторых случаев, сохраняя setprecision (2)? - PullRequest
0 голосов
/ 06 февраля 2020

У меня проблема с Zybooks, когда он просит убрать второе десятичное значение, если оно равно 0, но не удалять его, если это не так. Как бы я исправить эту ошибку?

image

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Решение немного длинное, но оно будет работать. Вот код, содержит три примера ...

#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
0 голосов
/ 06 февраля 2020

Попробуйте изменить его на setprecision (1) для этих случаев.

Я пробовал, и оно работает:

int main()
{
  double a = 1.1;
  double b = 1.2;
  cout << fixed << setprecision(2) << a << endl;
  cout << setprecision(1) << b << endl;
}

Это вывод:

1.10
1.2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...