0

我不被允许使用 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;
     }

}
4

5 回答 5

5

使用std::fmod. 它有一个双打重载:

#include <cmath>

std::fmod(num1, num2);
于 2013-10-21T19:31:05.273 回答
1

模算子%是一个积分函数。

您需要使用fmod浮点数。

于 2013-10-21T19:31:30.233 回答
1

%仅允许用于整数类型或无范围枚举,您可以将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;
}
于 2013-10-21T19:31:41.773 回答
0

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

于 2013-10-21T19:35:59.083 回答
0

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

我在我的一个代码中进行了此更改并正确处理,但有警告。但它确实工作得很好,所以试试吧,它应该工作得很好。

于 2013-10-21T19:36:53.893 回答