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

C++ 在c+中使用双精度时,模数不起作用+;,c++,C++,我不被允许使用mod。我认为它不起作用,因为我使用双打;有办法解决这个问题吗?--注释区域不起作用 void displayResults(double num1, char oper, double num2) { switch(oper) { case '+' : cout << num1 << "+" << num2 << "=" << (num1+num2) << endl;

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

}
void显示结果(双num1、字符操作、双num2)
{
开关(操作)
{
格“+”:
不能使用。它有一个双打过载:

#include <cmath>

std::fmod(num1, num2);
#包括
标准::fmod(num1,num2);

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


您需要使用
fmod
进行浮点运算。

%
仅允许用于整数类型或非范围枚举,您可以使用double:

#包括
#包括
int main(){
双num1=5.5;
双num2=3.0;
双z=std::fmod(num1,num2);

std::cout当然,您可以重载“%”运算符来对任何类型执行模运算。但是,该语言中没有内置的对double的支持。

我认为您可以将double替换为“long int”,这将帮助您克服错误,这也适用于所有基于整数的操作


我在我的一个代码中做了这一更改,并得到了正确的结果,不过有一个警告。但它确实工作得很好,所以请尝试一下,它应该工作得很好。

你不被允许?它怎么不工作?编译器错误?运行时异常?输出不正确?我真的不明白。从数学上讲,例如,2.6/1.5的剩余部分是什么?@khajvah i m我可能是蝙蝠侠,但我不是数学家。:-@khajvah:如果我们想要a/b的余数,其中b是正的,写a=q*b+r。q必须是整数,我们需要0@KenWayneVanderLinde根据
cppreference.com
a-q*b
的绝对值必须小于
b
的绝对值,所以当
b
I如果是否定的,我们选择否定的
q
。因此,余数在这两种情况下都是相同的。@khajvah:是的,fmod与
a
给出了相同的符号。但是这与数学用法不同,所以有时它很容易混淆!你所说的“内置”是什么意思。
std
不是“内置”吗?std中似乎有一个函数用于doubles@khajvah有一个函数,但不支持双精度运算符%的内置支持。
#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;
}