栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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


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

 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了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019045.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号