Skip to content

Latest commit

 

History

History
37 lines (23 loc) · 1.93 KB

DontForgetDotInFormat.md

File metadata and controls

37 lines (23 loc) · 1.93 KB

Python里字符串Format时的一个易错“点”

这是一篇很小的笔记,原因是我做学习通的时候见到了这个题:

quiz-2021-10-30

当时看了一会儿发现没有符合自己想法的答案,然后就脑袋一热选了C,结果当然是错了...

gosh-2021-10-30

看了一眼这个format的字符串对象,发现有个 {:7.2f} 的写法。既然 {:.2f} 是保留两位小数,那么这个 7 一定是保留七位整数吧!

但是定睛一看,不对啊,这答案也没有填充满7位啊!打开搜索引擎查了一下 Python format ,找了几篇文章都没有强调这件事,看了老久发现菜鸟教程提到了个“宽度”,我心里一惊,这就是我想要的结果。

问题出现在哪里呢?

7.2f 指的其实是保留2位小数的同时保证数字宽度7。之所以说是宽度,因为整个数字 包含小数点 都被算在内。 例如:

数字 宽度
4 1
3.14 4
450 3
14.43 5

再返回去看上面那道题,其实是选B101/7保留2位小数得14.43,而这个数值的宽度只有5,所以默认在数字之前补充两个空格: 14.43。如果用Python的左填充写法更明显:

print("{:0>7.2f}".format(14.43))
# 0014.43

了解了这个之后我突然想起来,C语言里的百分号%格式化符其实也是同样有printf("%7.2f",14.43)这种写法的,7这个宽度同样是把小数点算入在内

写这篇笔记也是为了加深咱自己的印象...希望以后不要再犯这种错误( ̄ε(# ̄)☆╰╮o( ̄皿 ̄///)

ahhh-2021-10-30