文章目录
- 浮点数
- C语言规定:
- 总结:
- 浮点数的输出
- 常用的库函数
- 应用技巧
- 科学记数法
浮点数
浮点数也称小数或实数, C语言中采用float 和double关键字来定义小数, float 称为单精度浮点型, double称为双精度浮点型,long double更长的双精度浮点型.浮点数通常只是实际值的近似值, 比如7.0可能被存储为6.999999
C语言规定:
- float 类型必须有至少6位有效数字, 且取值范围至少是10-37-1037
- double与float的最小取值范围相同, 但至少必须有表示10位的有效数字.
- long double 满足比double类型更高的精度要求.不过,C只保证long double类型至少与double类型的精度相同.
- float 数的两个特征:
- float数据类型表达的是一个近似的数, 不是准确的, 小数点后的N位有误差, 浮点数的位数越大, 误差越大, 到8位的时候误差了1, 基本上不能用了.
- 用"=="可以用来比较两个整型或字符是否相等, 但看起来相等的两个浮点数就是不会相等.
总结:
- float 只能表达6-7位的有效数字, 不能用
==
来判断两个数字是否相等. - double 能表达15-16位有效的数字, 可以使用
==
来判断两个数字是否相等. - long double 与 double的特征相同.
- ==在实际开发中,建议弃用float, 只采用double就可以了, long double 暂时没必要, 但以后的操作系统和编译器对long double 是 否有改进, 暂时不得知. ==
浮点数的输出
- float 采用
%f
输出, - double 采用
%lf
输出,测试结果显示, 也可以使用%f
输出,%lf
缺省显示小数点后六位.如果要显示小数点后n位, 用%.nlf
这个python中的保留多少位小数位一样的, 比如保留2位, 就是%.2f
, %lf
完整的输出格式是%m.nlf
, 指定输出数据整数部分和小数部分共占m位, 其中有n位是小数位, 若实际数值长度小于m, 则左侧补空格, 若实际数值长度大于m, 则按实际输出.- long double 采用
%Lf
输出, 注意L
是大写的
常用的库函数
-
double atof(const char *nptr);
// 把字符串nptr转换为double. -
double fabs(double x );
// 求双精度实数x的绝对值. -
double pow(double x, double y);
// 求x的y次幂(次方) -
double atof(const char *nptr);
// 把字符串nptr转换为double. -
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所指的变量中, 返回小数部分.
应用技巧
- 在实际开发中, 我们经常用整数代替浮点数, 因为整数是精确的, 效率也更高.
- 如:人的身高一米七五, 使用米来表示,就是1.75m, 是浮点数, 使用厘米表示就是175cm, 是整数,
科学记数法
在实际开发中, 很少使用科学记数法, 浮点数经常出现在计算机系统中, 在内存中的存放方式就是科学计数法, 科学记数法是一种记数的方法, 把一个数表示成a与10的n次幂相乘的形式,(1<=|a|<10, n为整数)
- 如: 678000000000也可以记为6.78X1011计算器与电脑表达10的幂一般是用E或e, 也就是说678000000000=6.78E11或6.78e11
- 输出采用:
%E
或%e
, 完整的输出方式是:%m.nE
或%m.ne
指定输出数据整数部分和小数部分共占m位, 其中有n位是小数位, 若实际数值长度小于m, 则左侧补空格, 若实际数值长度大于m, 则按实际输出