今天遇到一个关于小数位四舍五入的问题,上网查没找到比较清楚的解释,于是翻书结合实操对它进行了一下研究
注意:下面的x可以是任何正整数
由特殊到一般
C语言中当你用printf()输出实型数据时
"%f"默认保留小数点后6位数,少于6位用 0 补足,多则四舍五入到第6位
更深入的了解,会发现
"%xf"我们稍后提
"%.xf",x表示输出小数点后x位,少则补0,多则四舍五入到第x位
有时候我们需要更精准地保留我们想要的位数并且要四舍五入,于是就需要这个知识点。
注意下面的x可以是任何整数
接下来讲"%xf"
“%x”f
如果我
float a=123;
float b=12;
printf("%f%8f",a,b);
输出:123.00000012.000000
会发现它俩挨在一块儿
由这个单一例子我想说的是 8 代表至少分配给对应输出数据的位置,而小数位也属于这个位置于是导致了输出时粘在一块的情况
我想让它们直接按至少留一个间隔,方便查看
于是我将代码改为
printf("%f%9f",a,b);
输出:123.00000012.000000
发现仍然是挨在一起的
原因是"."也占一个位置
即想要输出时让它们直接按至少留一个间隔
则至少得这样
printf("%f%10f"a,b);
输出:123.000000 12.000000
果然如此
得出结论
用printf()输出实型变量的值时
%xf中 x 表示显示时给出至少x个空位来以十进制小数形式显示对应的参数,按右对齐显示。(注意:这里的空位仅值显示时的一个数占一个的空位,非 bit),空位不是仅对于整数部分,而是对于这个数据本身,即"."和小数点后的位数也占给出的空位。
诶,你们是不是有点不记得 x 为负时会怎么样?
当x为负 如-11时
float a=123;
float b=12;
printf("%-11f%-10f",a,b);
输出:123.000000 12.000000
则会左对齐
我还想和大家请教一下~
1.当然,对于"%.xf",你可不能写"%.-10f"之类的
直接就是给你输出个 -10f
但为什么就只是给你输出个 -10f 呢?这么吝啬,连我的%.都没de了?
我觉得是因为函数printf()的格式转换说明符中并没有%.啥啥啥,电脑能看懂是因为允许有
如 %常系数d 的这个语法,而0.-1这样的数根本不存在,于是就以普通字符的形式原样输出了,至于为什么没有出现%.,
因为%.已经和-10f不是一体的了
而对于函数scanf()和printf(),格式转换说明符是以"%"开始,并以一个格式字符结束,如%d
但没有%.,则它既被识别为格式转换说明符,又无意义,于是便冗而无用(不知道有没有这个词哈,大概意思是:既不输出,也无作用)。
2.如果说我就想保留到某一位但我不想要四舍五入怎么办嘞?
当然我可以编写一段比较复杂的代码,但有没有更好的方式呢?