使用%运算符时出错的误差

时间:2016-12-16 08:58:04

标签: c++

我正在研究一个问题,要求创建一个类Rational,其变量为分子和分母,以及一个添加两个有理数的函数。

这是我创建的课程:

class Rational
{
public:
    // n stands for numerator and d stands for denominator
    double n,d;
    // add stands for addition
    void add(Rational r1, Rational r2);
};

这是我的职责:

void Rational::add(Rational r1, Rational r2)
{
    // ar stands for rational number after addition
    double ar;
    // new object which takes the value after addition
    Rational r3;
    // formula for numerator after addition
    r3.n=(r1.n*r2.d)+(r2.n*r1.d);
    // formula for denominator after addition
    r3.d=(r1.d*r2.d);
    // ratio equals divisor plus quotient multiplied to remainder
    ar=(r3.n/r3.d)+((r3.n)%(r3.d))*r3.d;
}

最后一行在编译期间生成以下错误:

error: invalid operands of types 'double' and 'double' to binary 'operator%'|

我是cpp的新手,这是我的作业......请帮忙...

3 个答案:

答案 0 :(得分:5)

(r3.n)%(r3.d)

nd属于double类型。运算符%(modulo)仅适用于整数。

作为@Cheers和hth。 - Alf在评论中指出,最好的解决方案是将nd声明为整数,因为它将更加连贯地表示一个有理数。

如果你不能这样做并且真的有理由使用双打,你将不得不使用std::fmod代替:

std::fmod(r3.n, r3.d)

答案 1 :(得分:2)

在C ++中%仅适用于整数。

nd使用整数类型。

这也有助于确保是数学整数,使用浮点类型无法保证。

答案 2 :(得分:0)

由于%仅适用于整数,因此您必须使用fmod(x,y)。您还必须添加#include <math.h>作为标题。