C语言float赋值200加5
浮点数的概念
浮点数也称小数或实数。例如,0.0、75.0、4.023、0.27、-937.198 都是合法的小数。这是常见的小数的表现形式,称为十进制形式。
C语言中采用float和double关键字来定义小数,float称为单精度浮点型,double称为双精度浮点型,long double更长的双精度浮点型。
在任何区间内(如1.0 到 2.0 之间)都存在无穷多个实数,计算机的浮点数不能表示区间内所有的值。浮点数通常只是实际值的近似值,例如7.0可能被储存为浮点值6.99999。
点用内存的情况
我们先来测试一下float、double和long double三种浮点数据类型占用内存的字节数
浮点数的精度
C标准规定,float类型必须至少能表示6位有效数字,且取值范围至少是10-37~10+37。
c语言round函数怎么使用double类型和 float类型的最小取值范围相同,但至少必须能表示10位有效数字。
long double,以满足比double类型更高的精度要求。不过,C只保证long double类型至少与double类型的精度相同。
看了上面这段文字,估计大家有点晕,在之前的整数章节中,long比int的占用的内存多,存放数据的值也就越大,并且有一个准确的范围,但是,为什么各种浮点数存放数据的值怎么就这么模糊呢?我先不解释原因,浮点数的存储方式比较复杂,暂时不讨论,先用几个程序来测试一下它们的特征。
1、测试float类型
从程序的运行我们可以看出float数的两个特征:
float数据类型表达的是一个近似的数,不是准确的,小数点后的n位有误差,浮点数的位数越大,误差越大,到8位的时候,误差了1,基本上不能用了。
2)用“==”可以比较两个整数或字符是否相等,但是,看起来相等的两个浮点数,就是不会相等。
2、测试double类型
从程序的运行我们可以看出double数的两个特征:
1)double数据类型表达的也是一个近似的数,不是准确的,小数点后的n位有误差,浮点数的位数越大,误差越大,到17位的时候,误差了1,基本上不能用了。
2)用“==”可以比较两个double数值是否相等。
3、测试long double类型
运行结果
long double的测试结果与double相同。
4、测试总结
float只能表达6-7位的有效数字,不能用“==”判断两个数字是否相等。
double能表达15-16位有效的数字,可以用“==”判断两个数字是否相等。
long double和double的特征相同。
在实际开发中,建议弃用float,只采用double就可以,long double暂时没有必要,但不知道以后的操作系统和编译器对long double是否有改进。
浮点数的输出
float采用%f输出,double采用%lf输出,测试结果证明,double也可以采用%f输出。
long double采用%Lf输出,注意,L是大写。
%lf缺省显示小数点后六位。
如果要显示小数点后n位,用%.nlf,例如:
double ff=7.5;
%.2lf显示 7.50
浮点数采用%lf输出,完整的输出格式是%m.nlf,指定输出数据整数部分和小数部分共占m位,
其中有n位是小数。如果数值长度小于m,则左端补空格,若数值长度大于m,则按实际位数输出。
常用的库函数
在接下来的内容中,我只介绍double,不再介绍float和long double两种数据类型相关的知识。
以下是常用的浮点数函数,必须掌握。
double atof(const char *nptr);      //把字符串nptr转换为double
double fabs(double x);              //求双精度实数x的绝对值
double pow(double x, double y);    //求 x 的 y 次幂(次方)
double round(double x);              // double四舍五入
double ceil(double x);                 // double向上取整数
double floor(double x);               // double向下取整数
double fmod(double x,double y);     //求x/y整除后的双精度余数
double modf(double val,double *ip); //把双精度val分解成整数部分和小数部分,整数部分存放在ip所指的变量中,返回小数部分。
还有一些数据计算函数,如正弦、对数、指数等,实际开发中极少使用,大家要用的时候再查资料,我就不介绍了。
整数转换为浮点数
运行结果
需要特别注意的是dd=ii/jj这一行代码,dd的值0,不是0.75,有点意外,所以,如果对整数转换为浮点数没有把握,加(double)强制转换是个好办法。
应用技巧
浮点数有一些坑,例如两个浮点数不相等和精度的问题,在实际开发中,我们经常用整数代替浮点数,因为整数是精确的,效率也更高。
例如人的身高一米七五,以米为单位,用浮点数表示是1.75米,如果以厘米为单位,用整数表示是175。
long整数的取值是-9223372036854775808~9223372036854775807,有效数字是19位,而double的有效数字才15-16位,所以,整数可以表达的小数更大的数,更实用,麻烦也更少。
货币:1.75元,如果采用0.01元为单位就是175,采用0.001元为单位就是1750,如果你说要更多小数怎么办?你这是钻牛角尖。
给大家说一个道,高水平的程序员不容易掉坑里,注意,是不容易,不是一定不会,最好的方法是没有坑。
科学计数法
在实际开发中,我们很少使用科学计数法,但是它经常出现在计算机系统中,例如浮点数在内存中的存放方式就是科学计数法,所以我们还是有必要学习科学计数法。