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

时间:2011-10-04 10:30:26

标签: c++ numbers

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

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

}

所以我的想法是,如果一个数是一个整数,如果它是负数或正数无关紧要,如果我们减少或增加它,我们必须得到零,但问题是,我们怎么能创建增加和减少的上限和下限?

11 个答案:

答案 0 :(得分:24)

#include <cmath>

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

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

尝试仔细命名功能。 integer并未提供任何实际所做的的线索,因此我将函数名称更改为更有意义的内容。

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

答案 1 :(得分:11)

为什么不做这样的事情:

bool integer(float k)
{
    return k == (float)(int)k;
}

(当然,请随意使用正确的C ++类型转换。)

答案 2 :(得分:5)

对于足够大的花车x-1 == x,这是行不通的。

您应该测试浮点的位模式以检查小数部分是否为0。

答案 3 :(得分:1)

将limit.h宏设置为整数的INT_MAX(最大值)或INT_MIN(最小值)

正确答案

 bool integer(float k)
    {
        if( k == (int) k) return true;
        return false;
    }

答案 4 :(得分:1)

我们可以使用math.h中的trunc方法

#include <math.h>

inline bool IsInt(float n)
{
    return !(n - trunc(n));
}

答案 5 :(得分:0)

您可以使用boost lexical_cast标头

  bool isinteger(float k){
  try{ 
      int tmp = boost::lexical_cast<int>(k);
      (void*) tmp;
      return true;
  }catch(boost::bad_lexical_cast &c){
  return false;
  }  

答案 6 :(得分:0)

我用过这个:

float a;
cin>>a;
int b=a;
float c=b/a; //can subtract too
if (c==1)      //just change to 0
{
    cout<<"Is integer";
}
else
{
    cout<<"not an integer";
}

愚蠢但有效!

答案 7 :(得分:0)

我想到了一种更简单的方法。
考虑一个浮点​​数,例如1.5。该数字的地板(即1)和该数字的天花板(即2)不同。对于其中任何一个小数部分的值都是如此。
另一方面,整数的下限值和上限值都相同。因此,检查数字的ceil和floor值将很容易,因此,查看它是否为整数。

#include <cmath>

bool is_integer(float n){
 int c = ceil(n);
 int f = floor(n);
 if(f==c){
  return true;
 } else {
  return false;
 }
}

答案 8 :(得分:0)

以下是您问题的有效代码

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

现在我将尝试在 2 个极端案例的帮助下解释我的代码

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

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

答案 9 :(得分:-1)

那么,为什么不呢?

#include <iostream>
using namespace std;
bool is_integer(float check){
        if (int(check) == check)
                return true;
        else return false;
}
int main()
{
        float input;
        cin >> input;
        if (is_integer(input))
        cout << endl << "It's an integer";
        else cout << endl <<" Not an integer";
        return 0;
}

答案 10 :(得分:-1)

下载以下头文件
checkVar.h
现在编写你的cpp源代码,如

#include <iostream> 
#include "checkVar.h"
using namespace std;
int main(){
int num;
cout << "Enter a number : ";
cin >> num;
if (check.ifInt(num)==1)
{
cout << "Integer";
}else{
cout << "Not integer";
}
/*
You can also check for float by using check.ifFloat(num) 
*/
}

请注意,您必须将checkVar.h与活动的cpp源文件一起保存:)