有没有人解释一下为什么会这样,不是%f会隐含输出6位吗?为什么结果会这样(两个输出不一样)?
这两个运行的结果和预期完全一样,纯粹的%f就是六位浮点数
但是你加了 ".4",他就会把小数控制到四位,.2f会控制到二位,可以再测试测试
因为你的a是float类型,且数值较大,所以会造成精度缺失。你可以使用double类型来解决
%f 默认保留小数点后六位
%.nf 默认保留小数点后n位(n<=6)
不懂可再问呀~
浮点数产生误差的原因,有两钟情况,会产生误差
1)以二进制保存浮点数,所以一些原本有限位的小数,可能变成一个无限循环的小数。比如:(十进制)0.9转成2进制是无限循环小数0.1110011001100110011...
2)计算机保存浮点数的精度有限,例如float可以保留十进制最多7位(二进制23位)有效数字,double 可以保留十进制15~16位(二进制52位)有效数字。那有效数字以后的就被忽略了。
float型数据改用double型来代替。