鱼C论坛

 找回密码
 立即注册
查看: 2414|回复: 5

[已解决]关于格式转换说明符

[复制链接]
发表于 2022-11-12 16:52:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
%f        是输入小数的格式转换说明符;

1.为什么有时候会出现%.4f或者%6.2f之类在%和f之间带有数字的形式?

2.这一种形式代表了什么?

3.其他的格式转换说明符会不会也存在一样的形式?

最佳答案
2022-11-12 20:01:07
本帖最后由 jackz007 于 2022-11-12 20:08 编辑

      "%.12f" 会显示 12 个小数位而不是 10 位,不过,只有当数据是 double 时,显示小数后面 12 位才有意义(精度有效),一般的 float 只能保证小数点以后 6 位有效。
     20.2 用 %6.2f 显示是 " 20.20" 而不是 "  20.2",因为,格式描述符中 %6.2 的 6 是可突破指标,而 2 是硬指标,不可突破,或者换句话说,6 位域宽能遵守就遵守,两位小数必须遵守。
     不止浮点数的格式描述符可以使用域宽,例如 "%6f",作为一个通用可选参数,域宽同时也适用于所有其他类型格式描述符,例如,"%20s"、"%8d"、"%10e" 等等。不过,带域宽的格式描述符一般只用在 printf() 中,在 scanf() 中不要轻易使用,否则,容易招来麻烦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-12 16:56:38 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-12 17:01 编辑
"%.4f"    按照保留 4 位小数打印变量值
"%6.2f"   按照 6 位域宽、右对齐、保留 2 位小数的格式打印变量的值,域宽指的是总共输出 6 个字符,如果数据输出不足 6 个字符,在左边用空格补足,如果超出 6 个字符,6 位域宽的约束就会失效。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-12 17:07:12 | 显示全部楼层

意思是如果我要输出100001.01
需要用到%6.2f

我要输出2222.25
结果会出来“  2222.25”,前面用两个空格代替吗?

如果不用会有什么影响?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-12 17:13:57 | 显示全部楼层
0unique0 发表于 2022-11-12 17:07
意思是如果我要输出100001.01
需要用到%6.2f

        非也,"2222.25" 是 7 个字符,超过域宽 6,实际打印效果等同于 "%.2f"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-12 19:48:04 | 显示全部楼层
jackz007 发表于 2022-11-12 17:13
非也,"2222.25" 是 7 个字符,超过域宽 6,实际打印效果等同于 "%.2f"

我还想问一下  .+  数字会有限制吗?
例如会不会出现%.12f,可以往后显示10个小数位吗?

如果是20.2用%6.2f
会得到  “  20.2”  吗,就是2前面空两格;

就是%d,%s,%e等一些格式转换符一样适用这个%6f吗

希望大佬可以解决我的问题,我会设为最佳答案的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-12 20:01:07 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-11-12 20:08 编辑

      "%.12f" 会显示 12 个小数位而不是 10 位,不过,只有当数据是 double 时,显示小数后面 12 位才有意义(精度有效),一般的 float 只能保证小数点以后 6 位有效。
     20.2 用 %6.2f 显示是 " 20.20" 而不是 "  20.2",因为,格式描述符中 %6.2 的 6 是可突破指标,而 2 是硬指标,不可突破,或者换句话说,6 位域宽能遵守就遵守,两位小数必须遵守。
     不止浮点数的格式描述符可以使用域宽,例如 "%6f",作为一个通用可选参数,域宽同时也适用于所有其他类型格式描述符,例如,"%20s"、"%8d"、"%10e" 等等。不过,带域宽的格式描述符一般只用在 printf() 中,在 scanf() 中不要轻易使用,否则,容易招来麻烦。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 19:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表