测试给定的数字是否为整数
Testing if given number is integer
我正在尝试实现用户定义的函数,该函数测试数字是否为整数:
#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,但问题是,我们如何创建递增和递减的上界和下界呢?
#include <cmath>
bool is_integer(float k)
{
return std::floor(k) == k;
}
这个解决方案应该适用于所有可能的k
值。我很确定这是一个可以使用==
安全地比较浮点数的情况。
尽量周到地命名函数。integer
没有给出任何线索它实际上做,所以我把函数名改为更有意义的东西。
为什么不这样做呢:
bool integer(float k)
{
return k == (float)(int)k;
}
?
(当然可以随意使用适当的c++类型强制转换)
对于足够大的浮点数x-1 == x
,这是行不通的。
您应该测试浮点数的位模式来检查小数部分是否为0
它的in limit.h宏设置为整数的INT_MAX(最大值)或INT_MIN(最小值)
正确答案
bool integer(float k)
{
if( k == (int) k) return true;
return false;
}
我们可以使用math.h
中的trunc方法#include <math.h>
inline bool IsInt(float n)
{
return !(n - trunc(n));
}
我想到了一个更简单的方法。
考虑一个浮点数,比如1.5。这个数的下限(即1)和这个数的上限(即2)是不同的。对于任何包含小数部分的值都是如此。
另一方面,整数的floor和ceiling值是相同的。因此,检查数字的上限和下限值很容易,因此,看看它是否是一个整数。
#include <cmath>
bool is_integer(float n){
int c = ceil(n);
int f = floor(n);
if(f==c){
return true;
} else {
return false;
}
}
可以直接使用boost词法强制转换头
bool isinteger(float k){
try{
int tmp = boost::lexical_cast<int>(k);
(void*) tmp;
return true;
}catch(boost::bad_lexical_cast &c){
return false;
}
下面是您的问题的工作代码。
bool isInteger( double num ) {
int n = int(num);
return (num - n == 0);
}
现在我将尝试用两个极端情况的例子来解释我的代码。
Case 1: 给定要检查的号码= 1.10。因此num = 1.10, n = 1。现在,num - n = 0.10这个不等于0。因此,代码的结果是false!
Case 2: 给定要检查的号码= 1。因此num = 1和n = 1。现在,num - n = 0,这个等于0。因此代码的结果是true!
为什么不这样呢?
#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;
}
相关文章:
- 检查输入是否不是整数或数字
- 是否基于数组B整数打印数组A中的整数
- 检查TCHAR数组输入是否为带符号整数C++
- 有没有一种优雅而快速的方法来测试整数中的 1 位是否位于连续区域
- 如果整数与指针大小相同,则重新解释将整数转换为指针双射是否具有双射作用?
- 在线程中读取无符号整数时,c++ 位是否以原子方式切换?
- 如何检测除整数以外的任何内容是否传递给我的类构造函数?
- 检查字符串是否为整数
- FlatBuffers/Protobuf 中是否有支持任意 24 位有符号整数定义的可移植二进制序列化架构?
- C++11 标准是否保证零值有符号整数的一元减号为零?
- 验证用户输入和整数是否C++
- 如何检查是否定义了固定宽度的整数
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- 将字符串转换为整数类型T,检查是否存在溢出
- 在C/C++中检查数字是否为整数(不带scanf/gets/etc)
- 整数指针数组的元素是否可以指向整数数组?
- 如何在 c++ 中解析包含整数的字符串并检查是否大于最大值
- 当 map 是一个整数数组并且由 operator[] 创建时,它是否初始化其映射类型
- 是否有任何内置函数可以检查给定的两个数字在给定整数数组中的顺序是否相同?
- 整数浮点数除以自身是否保证为 1.f?