float和double,你真的注意到了么

本文探讨了C语言中浮点数类型转换时的精度损失问题,指出默认3.14为double类型,而float类型的变量在赋值时需要加上f后缀以避免精度损失。错误地比较float和double可能导致不准确的相等判断。为解决此问题,建议使用fabs函数判断两个数的差值是否小于一定阈值。此外,还提到了VS编译器在输出浮点数时的精度限制,并给出了显示更多小数位数的方法。
摘要由CSDN通过智能技术生成

刚开始写程序,我们可能会写出这样的代码,大家觉得这行代码对么

 float a = 3.14

很明显不正确
在这里插入图片描述

正确的是什么呢

float a = 3.14f//这里的f不区分大小写

一、错误在哪里

在C语言里面,默认3.14是 double类型,而a是flaot类型,怎么证明呢?请看下面
在这里插入图片描述
结果很明显3.14占八个字节是double,a占四个字节是flaot。

二、导致的问题

精度损失

既然小伙伴们知道错误的源头,那么肯定就知道了错误是什么了,没错,就是在double向flaot的转换的过程中造成的精度损失

三、避免以下错误

不能直接判断相等

比如

float weight=3.14f;
double high=3.14;
if(weight==high)//这里是错误的,因为double和flaot的精度不同,必然会导致两数的大小出现差错
{
   ...
   ...   ...
}

那怎么修正呢,或者说该怎么比较两个数的大小呢,通过下面代码实现即可

 if (fabs(weight - high) < 0.000001)

注意两个数只是不能判断相等但是,判断大小(<,>)还是可以的。

四、输出时小数点的问题

大家在输出浮点类型的时候可能遇到了下面的情况
在这里插入图片描述
哎,不是double比flaot精度更高么,怎么输出的数据都是一样的呢?
其实不能完全怪double和flaot,要怪就只能怪vs编译器只输出小数点后六位
那怎么让vs乖巧一点呢,没错加上.n
在这里插入图片描述
可以看见a已经跟原来的数据有差别了,精度损失,这时候就要用double了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值