在c ++中使用双精度时模数不起作用

时间:2013-10-21 19:29:37

标签: c++

我不被允许使用mod。我认为这不起作用,因为我正在使用双打;有没有解决的办法? ---评论区域工作

void displayResults(double num1, char oper, double num2)
{
     switch(oper)
     {
     case '+' :
     cout << num1 << "+" << num2 << "=" << (num1+num2) << endl;
     break;

     case '-' :
     cout << num1 << "-" << num2 << "=" << (num1-num2) << endl;
     break;

     case '*' :
     cout << num1 << "*" << num2 << "=" << (num1*num2) << endl;
     break; 

     case '/' :
          if ( num1==0 || num2==0)
          cout <<"A number divided by 0 or divided into 0 is always 0"<< endl;
          else
          cout << num1 << "/" << num2 << "=" << (num1/num2) /*+ (num1%num2) */ << endl;
          break; 
    // case '%' :
    // cout << num1 << "%" << num2 << "=" << (num1%num2);
    //break;
     }

}

5 个答案:

答案 0 :(得分:5)

使用std::fmod。它有双重超载:

#include <cmath>

std::fmod(num1, num2);

答案 1 :(得分:1)

模数运算符%是一个整数函数。

您需要使用fmod作为浮点数。

答案 2 :(得分:0)

%仅允许使用整数类型或无范围的枚举,您可以将std::fmod用于 double

#include <cmath>
#include <iostream>

int main() {
    double num1 = 5.5;
    double num2 = 3.0;
    double z = std::fmod(num1,num2);

    std::cout << z << std::endl ;
    return 0;
}

答案 3 :(得分:0)

当然,您可以重载'%'运算符以对您喜欢的任何类型执行模数运算。但是,双语的语言没有内置支持。

答案 4 :(得分:0)

我认为你可以用'long int'替换你的双打,这将帮助你克服错误,这也适用于所有基于整数的操作。

我在我的一个代码中做了这个更改并且做对了,但是发出了警告。但它确实工作得很好,所以试试,它应该可以很好地工作。