f不是只能赋值6位小数么,赋值时候应该直接舍去最后一个0,可是输出尾数有个79是为什么啊?
float只能保存7位 也就是只有123。4567是有效的 后面的都无效
由于float类型尾数部分位数是固定的小数点后23位,23位所能表示的最大数是2^23−1=8388607,所以float最多能表示小于1/8388607的精度,即6-7位有效数字。再后面就没有意义了,并且float数据 机器内是2进制数, 1位符号位 8位指数位 23位“尾数”位 共32 位 2进制数。 平时讲 有效数字 是6~7位 ,指10进制。 通常程序输入的数是10进制,进入机器后要化成2进制,计算完又转十进制输出。 10进制到2进制,2进制到10进制 转换,有的数化不净,有的数化得净。 如同10进制分数化10进制小数,有的化得净(例如 4分之1,变0.25),有的化不净(例如 3分之1,变0.33333....)。 10进制到2进制,2进制到10进制 转换,化得净的效数字7位,化不净的效数字6位,因为最后一位有舍入误差。 例如: float x,y; x=0.51; // 化不净 y=0.5; // 化得净 printf("x=%.8f y=%.8",x,y); // 输出 0.50999999 0.50000000
float型有效值只有6-7个数字(不是小数位),用%f格式输出,默认带6位小数。准确数字只有123.4567,后面的81不准确了,输出成79
只是6位有效数字,不是6位小数
二进制转换10进制不一定能正好对应,那么会有无穷的余数,只是后面的数字没有意义