Как преобразовать дроби в числа с плавающей точкой в ​​C ++ - PullRequest
0 голосов
/ 23 мая 2018

Мое требование - складывать, умножать, вычитать и делить рациональные дроби, используя классы, а затем реализовать автономную (неклассовую) функцию void printRationalAsFloating(const Rational &r), использующую функцию friend для печати переданных чисел Rational в числа с плавающей запятой.Мой вывод в порядке с multiplication, но с addition не так.Я не знаю, что-то не так с friend function или с printRationalAsFloating.

мой вывод:

Testing addition : 1/2 * 1/2 = 4/4
Rational as floating:1                //it should be something like 1.00
Testing multiplication : 1/2 * 1/2 = 1/4
Rational as floating:0.25

int main ();

cout<<"Testing addition : ";
                    n1 = n2.addition(n3);
                    n2.printRational();
                    cout <<" + ";
                    n3.printRational();
                    cout <<" = ";
                    n1.printRational();
                    cout << endl;
                    cout << "Rational as floating:";
                    printRationalAsFloating(n1);
                    cout << endl;
                    Rational n1;
                    Rational n2(1,2);
                    Rational n3(n2);
                    cout<<"Testing multiplication : ";
                    n1 = n2.multiplication(n3);
                    n2.printRational();
                    cout <<" * ";
                    n3.printRational();
                    cout <<" = ";
                    n1.printRational();
                    cout << endl;
                    cout << "Rational as floating:";
                    printRationalAsFloating(n1);
                    cout << "  ";

заголовочный файл:

using namespace std;

class Rational {

  public:
    Rational();        // default constructor
    Rational(int, int); //std (initialisation) constructor
    Rational(const Rational&); //copy constructor
    Rational multiplication(const Rational &);
    Rational addition(const Rational &);
    friend void printRationalAsFloating(const Rational &);
    void printRational();
  private:
   int numerator;
   int denominator;
};

вот моя кодировка:

void printRationalAsFloating(const Rational &r)
{
    float numerator,n;
    float denominator;
    if (r.denominator==0) 
    {
        string exceptionString = "\n\nError: 'Cannot divide by zero'.\n";
        throw exceptionString;
        cout << "ERROR: ATTEMPTING TO DIVIDE BY ZERO" << endl;
        exit(0); // will terminate the program if division by 0 is attempted
    }
    n = r.numerator / r.denominator;

    cout << n ;

}  

using namespace std;
//addition
Rational Rational::addition(const Rational &a)
{ 
      return Rational(numerator * a.denominator + a.numerator * denominator, 
      denominator * a.denominator);
}
//multiplication
Rational Rational::multiplication(const Rational &a)
{ 
   return Rational((numerator * a.numerator) ,denominator * a.denominator);
}

//display fraction
void Rational::printRational()
{
    cout << numerator << "/" << denominator ;
}

Я пытался сделать его кратким, но если вам все еще нужен дополнительный код, пожалуйста, прокомментируйте ниже, и я буду загружать больше для вашего удобства.Спасибо

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Вы делите int на int.Это дает int, затем приведенное к float.Сначала конвертируйте int в float

float n = r.numerator / (float)r.denominator;
0 голосов
/ 07 августа 2018
void printRationalAsFloating(const Rational &r)
{
float numerator,n,denominator;
if (r.denominator==0) 
    {
        string exceptionString = "\n\nError: 'The denominator of a rational cannot     be zero'.\n";
        throw exceptionString;
        //cout << "ERROR: ATTEMPTING TO DIVIDE BY ZERO" << endl;
        //exit(0); // will terminate the program if division by 0 is attempted
    }
n = (float)r.numerator / r.denominator;

cout << n ;

}
0 голосов
/ 23 мая 2018

This:

n = r.numerator / r.denominator;

вызывает целочисленное деление .

Попробуйте привести хотя бы один операнд к double, например:

n = r.numerator / (double) r.denominator;
...