034.float类型的定义和输出
035.浮点数的精度缺失以及浮点数和其科学计数法的打印
关于浮点数精度的丢失,下面是上图的运行结果:
很明显,有些数发现会稍微多一点或者少一点。这个现象的原因是因为我们在输入一个十进制数时,系统内部会把它转换成二进制数再进行操作,之后再转换回十进制返回出来,而浮点数小数部分在转换成二进制的时候有可能会出现无限循环小数,之后进行操作完再转换回十进制浮点数就会导致返回的数与实际的数之间有一点精度的缺失。
由于精度缺失,所以我们才要在浮点数的数字最后加上字母f(F也可以),就是要告诉写代码的人,这个数有可能会有精度缺失。
应对精度缺失,可以用double替换float(double也是表示浮点数,但是不同的是,double代表的是双精度浮点数)
这是因为double的精度比较高
需要注意的是:double类型的格式化占位符是%lf double类型的数字后面不用加后缀
---------------------------------------------------------------------------------------------------------------------------------------------------------
限制浮点数的输出位数
可以发现,小数点后面零的个数变成了4个
---------------------------------------------------------------------------------------------------------------------------------------------------------
想打印出百分号就打出两个百分号:
其实上面的percentage没必要定义成float类型,整形就OK。
下面的printf中三个百分号,前两个作用是在输出结果中输出一个百分号,最后一个是格式化占位符
---------------------------------------------------------------------------------------------------------------------------------------------------------
037. Infinity 与Nan
引入头文件 include
INFINITY 无穷大 inf
nan 全称为 not a number 不确定,不是一个数
038.最近偶数舍入(银行家舍入)标准
round to nearest , ties to even
四舍六入五留双
wok!我不明白
039.double, long double
float 4个字节 速度快,但可能丢失精度
double 8个字节 精度更高,但是占用内存较大
可以看到,float在大约6、7位(有效位)的时候,往后就不精确了
而都变了大约在15、16位(有效位)往后也不精确了
但是保守一点,保守位最好按6位和15位来
在输出double类型的数据时,占位符也可以用 %f 而不去用 %lf ,但是在处理精度(保留位数)的时候必须用 %lf 。(但是在企业中的时候不经常用到)