我正在尝试实现用户定义的函数,该函数测试数字是否为整数:
#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;
}
所以我的想法是,如果一个数是一个整数,如果它是负数或正数无关紧要,如果我们减少或增加它,我们必须得到零,但问题是,我们怎么能创建增加和减少的上限和下限?
答案 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源文件一起保存:)