double的输出有争议(读入没有):
大体来说,网上流传三种版本,如下:
①float用%f,double用%lf
②float,double都用%f %f是标准的格式,而%lf则是为了照应习惯
③printf有所谓的“默认参数提升”规则,float会被提升为double,所以printf输出的浮点数只能见到双精度
刘汝佳解释:C99中,double的输出必须用%f,但是在C89和C++中都不必如此,都可以用%lf
printf(“%m.nf”,a);问题:
m是指输出浮点数的实际位数,即几列(然并卵,原因会解释)
应该注意的是,小数点也占一列(一位)
如果m小于等于a的实际位数,则按实际输出
如果m大于a的实际位数,则在a左边添空格(但如果是%0m.nf就添0)至位数达到m后输出
n是指精确到小数点后几位
如果n小于a实际小数点后的位数,应该是四舍五入(但不排除某些编译器偶尔出现直接切尾的情况)
如果n大于a实际小数点后的位数,在后面添0至小数点后n位
float和double的区别与联系
单精度占4字节,双精度占8字节
单精度有效数字七八位,双精度十五六位
单精度运算快,双精度范围大
%f默认输出6位小数
这俩精度再高,浮点数也不是小数,只是近似数
欢迎来到睿屿青衫