关于floath(double)类型变量输入和输出不同的问题解说及其大小比较方法

本文探讨了浮点数在计算机中的表示方式及其可能导致的精度问题,解释了为什么输入的浮点数在输出时会出现微小的差异。此外,文章还提供了如何正确比较浮点数的方法,以避免因精度问题导致的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题引入:

#include<stdio.h>
int main()
{
    float i;
    scanf("%f",&i);
    printf("%f\n",i);
    return 0;
}

输入:24.567

输出:24.5669999

float类型变量输入和输出的值不一样???

问题解答:

这是因为我们输入是十进制小数,而转化为机器代码,是用二进制表示的,小数部分转化为二进制(“乘2取整”),需要不断的乘以2,去其整数部分,但反复运算,有些小数是算不进的,而float是有位数长度限制的。计算机数据的浮点表示和整数表示的数据编码方式是不一样的,计算机表示浮点数会存在一定误差。

问题延伸:float(double)类型变量的大小比较

由于计算机表示浮点数存在误差,因此在进行两个浮点数之间的比较大小时不能像整数之间比较大小一样直接使用比较符号进行比较。举例说明:

#include<stdio.h>
int main()
{
    int a,b;
    float n,m;
    //整数比较大小
    scanf("%d%d",&a,&b);
    if(a>=b)
        printf("%d\n",a);
    else
        printf("%d\n",b);
    //浮点数比较大小
    scanf("%f%f",&n,&m);
    if((a-b)>=0.000001)//设置的比较误差(0.000001)取决于当前系统的精度
        printf("%f\n",n);
    else
        printf("%f\n",m);

    return 0;
}

如果要判断浮点型是否相等,可以先求两个浮点型差的绝对值,再和系统精度(例:0.000001)比较。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值