不能在双打上使用模数?

时间:2012-02-04 06:02:39

标签: c++ modulo

我有一个C ++程序(使用g ++编译)。我正在尝试将两个双精度数作为操作数应用于模数函数,但是我得到以下错误:

  

错误:类型为'double'和'double'的操作数无效,为二元'运算符%'

以下是代码:

int main() {
    double x = 6.3;
    double y = 2;
    double z = x % y;
}

4 个答案:

答案 0 :(得分:250)

%运算符用于整数。您正在寻找fmod() function

#include <cmath>

int main()
{
    double x = 6.3;
    double y = 2.0;
    double z = std::fmod(x,y);

}

答案 1 :(得分:36)

fmod(x, y)是您使用的功能。

答案 2 :(得分:5)

使用fmod()中的<cmath>。如果您不想包含C头文件:

template<typename T, typename U>
constexpr double dmod (T x, U mod)
{
    return !mod ? x : x - mod * static_cast<long long>(x / mod);
}

//Usage:
double z = dmod<double, unsigned int>(14.3, 4);
double z = dmod<long, float>(14, 4.6);
//This also works:
double z = dmod(14.7, 0.3);
double z = dmod(14.7, 0);
double z = dmod(0, 0.3f);
double z = dmod(myFirstVariable, someOtherVariable);

答案 3 :(得分:-1)

您可以实现自己的模数函数来为您做到这一点:

double dmod(double x, double y) {
    return x - (int)(x/y) * y;
}

然后,您可以简单地使用dmod(6.3, 2)来获取剩余的0.3