C++如何检查浮点数是否为整数

本文介绍了四种在C++中检查浮点数是否为整数的方法:1) 向上向下取整法;2) fmod函数取余法;3) modf函数整数小数分离法;4) 作差法。通过这些方法,可以判断浮点数小数点后是否有非零数值。

如何检查浮点数是否为整数

今天在写程序的时候,突然遇到这个问题——如何判断一个浮点数小数点后是否有小数值?

刚开始想了一个比较麻烦的方法,感觉不妥,太浪费时间了,然后就上网看了一些其他人的思路,借此总结一下几种判断方式。

Number 1: 向下向上取整法
int main() {
    float num1 = 10.0f;
    float num2 = 2.0f;
    double res = num1 / num2;
    if(ceil(res) == floor(res))							
        std::cout << "整数" << std::endl;
    else
        std::cout << "小数" << std::endl;
    return 0;
}

头文件 <cmath>

ceil():Computes the smallest integer value not less than arg. —— 向上取整

floor() : Computes the largest integer value not greater than arg. —— 向下取整

向上,向下取整后相同,则为整数

Number 2: fmod 浮点取余法
int main() {
    float num1 = 10.0f;
    float num2 = 2.0f;
    double res = num1 / num2;
    if(fmod(res,1.0)==0.0)
        std::cout << "整数" << std::endl;
    else
        std::cout << "小数" << std::endl;
    return 0;
}

头文件 <cmath>

double fmod( double x, double y ): Computes the floating-point remainder of the division operation x/y.——浮点型取余,例如 fmod(10.1,3.1) = 0.8 ,可以自行体会一下

浮点型取余后为0,则为整数

推荐一片博文:浮点型取余与%的区别

Number 3: modf 整数小数分离法
int main() {
    float num1 = 10.0f;
    float num2 = 2.0f;
    double res = num1 / num2;
    double interger  = 0 ;                  	//用来存放整数
    if(modf(res,&interger) == 0.0)
        std::cout << "整数" << std::endl;
    else
        std::cout << "小数" << std::endl;
    return 0;
}

头文件 <cmath>
double modf( double x, double* iptr ):Decomposes given floating point value x into integral and fractional parts——分解浮点数为整数和小数

x是要检验的数据;

iptr:是一个存放整形变量的地址,类型是double;

返回值:返回值是小数点后的值

返回值如果为0.0,即为整形

Number 4: 作差法(最简单)
int main() {
    float num1 = 10.0f;
    float num2 = 2.0f;
    double res = num1 / num2;
    if(res - int(res) == 0)
        std::cout << "整数" << std::endl;
    else
        std::cout << "小数" << std::endl;
    return 0;
}

int(res):强制类型转换为整形,然后浮点型与整形作差

如果为0,则为整形

恕我把最简单的放在最后,目的为了大家多学点东西。如果有更好的想法,也可以写下来,互相学习!

。◕‿◕。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值