一、打印float类型
- %f来表示float和double类型的数字
- %e来打印指数记数法的浮点数
- 如果系统支持十六进制的浮点数,可以使用a和A分别来代替e和E
- 打印long double类型要使用%Lf或%Le或%La来替代
#include<stdio.h>
int D12_1_showf_pt(void) {
float aboat = 32000.0;
double abet = 2.14e9;
long double dip = 5.32e-5;
printf("%f can be written %e \n", aboat, aboat);
//下一行要求编译器支持C99或其中的相关特性
printf("And it's %a in hexademical,power of 2 notation\n", aboat);
printf("%f can be written %e\n", abet, abet);
printf("%Lf can be written %Le\n", dip, dip);
return 0;
}
运行结果:
二、浮点值的上溢和下溢
- 当计算导致数字过大,超过了当前类型所能表达的范围时,就会发生
上溢
- 这种行为过去是未定义的,现在会赋值一个
无穷大
的值,printf
该值的时候会显示inf
或infinity
。 - 当计算导致数字过大,超过了当前类型所能表达的范围时,就会发生
下溢
- C语言把损失了类型全精度称为
低于正常值
的浮点值。 - C库已经提供了用于检查计算是否会产生一个低于正常值的函数。
#include<stdio.h>
int D12_2_Floaterr(void) {
float a, b;
b = 2.0e20 + 1.0;
a = b - 2.0e20;
printf("%f\n", a);
return 0;
}
运行显示:
三、源码:
- D12_1_showf_pt.c
- D12_2_Floaterr.c
- https://github.com/ruigege66/CPrimerPlus/blob/master/D12_1_showf_pt.c
- https://github.com/ruigege66/CPrimerPlus/blob/master/D12_2_Floaterr.c
- CSDN:https://blog.csdn.net/weixin_44630050
- 博客园:https://www.cnblogs.com/ruigege0000/
- 欢迎关注微信公众号:傅里叶变换,个人账号,仅用于技术交流,后台回复“礼包”获取Java大数据学习视频礼包