测试给定的数字是否为整数

新手上路,请多包涵

我正在尝试实现用户定义的函数来测试数字是否为整数:

 #include <iostream>
#include <typeinfo>
using namespace std;
bool   integer(float k){
                  if (k==20000) return false;;
                  if (k==(-20000)) return  false;
 if (k==0)  return true;
   if (k<0)  return integer(k+1);
   else if(k>0)  return integer (k-1);
   return false;
}
int main(){

    float s=23.34;
       float s1=45;
       cout<<boolalpha;
       cout<<integer(s)<<endl;
       cout<<integer(s1)<<endl;
       return 0;

}

所以这个想法是,如果一个数字是一个整数,不管它是负数还是正数,如果我们将它减一或加一,我们必须得到零,但问题是,我们如何创建上和增加和减少的下限?

原文由 user466534 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 716
2 个回答
#include <cmath>

bool is_integer(float k)
{
  return std::floor(k) == k;
}

此解决方案应适用于 k 的所有可能值。我很确定在这种情况下,您可以使用 == 安全地比较浮点数。

尝试仔细命名函数。 integer 没有给出任何线索它实际上 了什么,所以我把函数名改成了更有意义的名字。

对于未来,测试一个数字是否为整数应该是一个非常简单的操作,所以你应该有一个强烈的 _感觉_,最好的解决方案将非常简单。我希望你意识到你原来的解决方案是荒谬的,原因有很多(最大的原因:在绝大多数情况下它会导致堆栈溢出)。

原文由 tenfour 发布,翻译遵循 CC BY-SA 3.0 许可协议

下面是您的问题的工作代码

 bool isInteger( double num ) {
    int n = int(num);
    return (num - n == 0);
}

现在我将尝试借助 2 个极端案例示例来解释我的代码

案例 1给定要检查的数字 = 1.10。因此 num = 1.10 和 n = 1。但是现在,num - n = 0.10 并且这不等于 0。因此代码导致错误!

情况 2给定要检查的数字 = 1。因此 num = 1 和 n = 1。但是现在,num - n = 0,这等于 0。因此代码结果为真!

原文由 spiyush0212 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题