【问题标题】:How to determine if result of two integer numbers is integer of float?如何确定两个整数的结果是否为浮点整数?
【发布时间】:2015-11-02 13:33:53
【问题描述】:

当我将两个整数相除时,我试图确定结果是否为整数。我该怎么做?

float result;
int number1, number2;
cout<<"Give me number 1 and 2"<<endl;
cin>>number1;
cin>>number2;
result = number1 / number2;
if(result == int)
{
   cout<<"The numbers can be devided"<<endl;
}else cout<<"The numbers can't be devided"<<endl;

我出错了,因为你不能那样做,有人可以帮帮我吗?这让我很烦,每篇文章都在告诉我,如何检查输入是否为整数,而不是结果。我不关心输入,我想知道结果是否为整数。感谢您的帮助!

编辑:

所以我的函数看起来像这样:

int funkcijaDva()
{
    int popizdobom = 0;
    int tri = 3;
    int tristo = 300;
    int tritisoc = 3000;
    float result;
    for(; tristo!=tritisoc;tristo++)
    {
        result = (int)tristo / tri;
        if(tri % tristo == 0)
        {
            popizdobom++;
        }
    }
    return popizdobom;
}

popizdobom 的结果总是 0...我做错了什么吗? 编辑: 让它工作......我猜编译器有问题......

【问题讨论】:

  • 写100次:“C is not C++ is not C!”。
  • 两个ints 的操作结果将永远是int
  • 这实际上是一个合法的问题,因为我班上没有人知道如何解决它,所以不要对它这么消极......
  • “我班上没有人......”在这里不合法。但是,问题不在于问题本身,而在于您没有提供信息。
  • 我不明白为什么这个问题有这么多反对票?如果你不喜欢这个问题,或者你认为它太基本,那就不要回答它......如果你这样做,那么对你的反对票给出适当的解释......

标签: c++ integer


【解决方案1】:

您可以使用 modulo 运算符 (%) 轻松检查它,它可以找到一个数字除以另一个数字后的余数:

if(number1 % number2 == 0) 
{
  // result of division is integral 
  // or in other words: number1 / number2 = whole number
}

请注意,number1number2 必须是整数才能使模数起作用。

您还必须将至少一个整数转换为float,以便得到float 作为除法的结果。

float result = (float)number1 / number2;

您可以在此处阅读有关 运算符的更多信息: https://en.wikipedia.org/wiki/Modulo_operation


编辑: 结合了以下 cmets 的一些建议。

【讨论】:

  • 一旦分裂,为时已晚。你真的想在分开之前检查一下。
  • 不,我需要知道我的结果是否为整数......而且我不知道你刚刚在这里做了什么......
  • @AlexVandalowski 我使用模运算符,它在 C 和 C++ 中写为 %。您可以在 wikipedia 上阅读有关此运算符的更多信息。 (我提供了一个链接)。
  • @AlexVandalowski:自己做一些研究怎么样? “C 运算符”将找到您需要的所有信息。不要依赖别人的一点一滴解释。
  • @AlexVandalowski 正如其他人所写,如果您对整数进行操作,您将得到一个整数。例如。 5 / 2 在 C++ 中是 2,而不是 2.5。相比之下,5.0 / 22.5。如果您真的想对两个 int 变量进行浮点除法,请在将结果分配给您的 result 变量之前使用 (float) number1 / number2。然后问题变成了一个完全不同的问题:“如何检查浮点值是否为整数?”。尽管如此,正如这个答案所示,合理的做法是使用模数。
【解决方案2】:

如果您想实际评估除法,则需要以浮点数进行。你可以通过写来做到这一点

double f = 1.0 * number1 / number2;

1.0 强制除法以浮点进行。

然后您可以通过评估ceil(f) == f 来检查f 是否为整数。 (请注意,这是精确浮点比较的合法用法)。

另一方面,如果您需要知道number1 / number2 是否产生余数,则评估number1 % number2。当且仅当number1 不完全除以number2 时,这将是非零的。

【讨论】:

  • 我需要知道 number1 / number2 = 整数。我不知道还能怎么说...例如。 5/6 != int 其中 5/5 = int & 10/5 = int,但 5/10 != int...
  • number1 / number2 是整数当且仅当 number1 % number2 为 0。
  • 第二种检查方法-> 除法的两个数字是int。您将结果存储在浮点数中。让我们称之为float fResult。让我们再次声明一个 int 变量为int iResult = int1/int2。然后检查是否iFloat&gt;iResult。如果是,则表示结果为浮点数(即大于 .0)
  • @anurag86:我不喜欢这种方法(i)它会因负数而中断,并且(ii)浮点精度会让您头疼。 ceil 是更好的方法。
  • 毫无疑问,芭丝谢芭所说的比我的方法要好得多。
【解决方案3】:

您可以使用此代码:

int result;
int number1, number2;
cout<<"Give me number 1 and 2"<<endl;
cin>>number1;
cin>>number2;
result = number1 % number2;
if(result == 0)
{
   cout<<"The numbers can be devided"<<endl;
}else cout<<"The numbers can't be devided"<<endl;

【讨论】:

  • 家庭作业帮助是一回事。但你至少应该解释一下。
猜你喜欢
  • 2014-10-06
  • 2013-02-25
  • 2011-08-13
  • 1970-01-01
  • 2023-03-14
  • 2019-05-07
  • 1970-01-01
  • 2011-08-07
相关资源
最近更新 更多