刚开始写程序,我们可能会写出这样的代码,大家觉得这行代码对么
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了