模量在 C++ 中使用双精度时不起作用

modulus is not working when using doubles in c++

本文关键字:双精度 不起作用 C++      更新时间:2023-10-16

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

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

#include <cmath>
std::fmod(num1, num2);

模运算符%是一个积分函数。

您需要将fmod用于浮点。

%只允许用于整型或无作用域枚举,您可以使用 std::fmod 表示双精度

#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;
}

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

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

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