0unique0 发表于 2022-11-12 16:52:37

关于格式转换说明符

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

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

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

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

jackz007 发表于 2022-11-12 16:56:38

本帖最后由 jackz007 于 2022-11-12 17:01 编辑

"%.4f"    按照保留 4 位小数打印变量值
"%6.2f"   按照 6 位域宽、右对齐、保留 2 位小数的格式打印变量的值,域宽指的是总共输出 6 个字符,如果数据输出不足 6 个字符,在左边用空格补足,如果超出 6 个字符,6 位域宽的约束就会失效。

0unique0 发表于 2022-11-12 17:07:12

jackz007 发表于 2022-11-12 16:56


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

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

如果不用会有什么影响?

jackz007 发表于 2022-11-12 17:13:57

0unique0 发表于 2022-11-12 17:07
意思是如果我要输出100001.01
需要用到%6.2f



      非也,"2222.25" 是 7 个字符,超过域宽 6,实际打印效果等同于 "%.2f"

0unique0 发表于 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吗

希望大佬可以解决我的问题,我会设为最佳答案的

jackz007 发表于 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() 中不要轻易使用,否则,容易招来麻烦。
页: [1]
查看完整版本: 关于格式转换说明符