C语言输出实型数据时的小细节点

今天遇到一个关于小数位四舍五入的问题,上网查没找到比较清楚的解释,于是翻书结合实操对它进行了一下研究

注意:下面的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.如果说我就想保留到某一位但我不想要四舍五入怎么办嘞?

当然我可以编写一段比较复杂的代码,但有没有更好的方式呢?

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值