风百默 发表于 2021-11-15 19:55:36

哪位大佬帮帮我,这个为什么是0009.900000而不是000000009.9?

本帖最后由 风百默 于 2021-11-15 21:17 编辑

>>>print("%011f"%(9.9))
0009.900000

傻眼貓咪 发表于 2021-11-15 19:58:21

本帖最后由 傻眼貓咪 于 2021-11-15 19:59 编辑

print("%.11f"%9.9)

风百默 发表于 2021-11-15 20:25:58

傻眼貓咪 发表于 2021-11-15 19:58
print("%.11f"%9.9)

不能理解

风百默 发表于 2021-11-15 20:27:26

风百默 发表于 2021-11-15 20:25
不能理解

你这不应该是9.90000000000吗?

风百默 发表于 2021-11-15 20:29:50

风百默 发表于 2021-11-15 20:27
你这不应该是9.90000000000吗?

我少打了个%号,应该是"%011f"%(9.9)

傻眼貓咪 发表于 2021-11-15 20:38:27

风百默 发表于 2021-11-15 20:29
我少打了个%号,应该是"%011f"%(9.9)

print("%011.1f"%9.9)

傻眼貓咪 发表于 2021-11-15 20:42:21

print("%011.1f"%9.9)

点前面的 011. 表示 小数点前面至少11位(如不足以 0 替代)
点后面的 .1 表示 小数点后面至少 1 位

风百默 发表于 2021-11-15 20:59:20

傻眼貓咪 发表于 2021-11-15 20:42
print("%011.1f"%9.9)

点前面的 011. 表示 小数点前面至少11位(如不足以 0 替代)


你确定你讲的对?011不应该表示,指定数据项输出的最小宽度为11,不足左边补0,.1表示为指定小数位数为一位。这是书上写的。而且你这回答的跟我的问题都不一样,麻烦你看清楚点。

傻眼貓咪 发表于 2021-11-15 21:09:29

风百默 发表于 2021-11-15 20:59
你确定你讲的对?011不应该表示,指定数据项输出的最小宽度为11,不足左边补0,.1表示为指定小数位数为一 ...

抱歉,如果你已经是大佬,就不必故意发问这些简单问题来测试我们这些小弟。
你是想说我语法错误,还是表达错误?我语法表达错误在这里万分表达歉意,如果你觉得我的解答不满意,不用勉强设为最佳解答,请你另请高明指点你这位大神吧,非常抱歉!我眼瞎

傻眼貓咪 发表于 2021-11-15 21:12:36

我的解答是针对 3 楼的你的问题(麻烦看清楚)

hrpzcf 发表于 2021-11-15 21:16:17

本帖最后由 hrpzcf 于 2021-11-15 21:19 编辑

%011f表示总宽度11字符包括小数点,不足11位以0补齐,f前面没.x表示默认6为小数。
下次发求助帖就行,不用悬赏1鱼币。

风百默 发表于 2021-11-15 21:37:49

hrpzcf 发表于 2021-11-15 21:16
%011f表示总宽度11字符包括小数点,不足11位以0补齐,f前面没.x表示默认6为小数。
下次发求助帖就行,不用 ...

抱歉,我刚刚的话太激了,我刚刚没有理解到位,你讲的是对的。对不起。但我还是想问为什么会是0009.900000?难道补0,是小数的话,小数点后面必须六位吗?

风百默 发表于 2021-11-15 21:42:43

hrpzcf 发表于 2021-11-15 21:16
%011f表示总宽度11字符包括小数点,不足11位以0补齐,f前面没.x表示默认6为小数。
下次发求助帖就行,不用 ...

那如果是%06的话是往前面补0,还是后面补0?

hrpzcf 发表于 2021-11-15 21:50:24

风百默 发表于 2021-11-15 21:42
那如果是%06的话是往前面补0,还是后面补0?

首先要满足.xf的小数位数。比如07.6f要首先要满足.6f即6位小数,这时候如果整个字符串字符数还小于7个,就用0补足,大于7就不补。到底往哪边补,要看对齐方式,左对齐就往右补,右对齐就往左补,没写对齐方式符号默认右对齐。
像你说的06f,f前面没.号,就默认.6,即06.6f,剩下的就是上面说的规则了。

风百默 发表于 2021-11-15 22:12:27

好的,谢谢,我懂了

风百默 发表于 2021-11-15 22:13:57

hrpzcf 发表于 2021-11-15 21:50
首先要满足.xf的小数位数。比如07.6f要首先要满足.6f即6位小数,这时候如果整个字符串字符数还小于7个 ...

好的,谢谢我懂了

白two 发表于 2021-11-16 20:46:26

默认六位的精度
>>> print("%f"%(9.9))
9.900000

这才是调整精度
>>> print("%.9f"%(9.9))
9.900000000

这样把精度调为1位就是你想要的结果:
>>> print("%011.1f"%(9.9))
000000009.9

z5560636 发表于 2021-11-17 10:00:07

傻眼貓咪 发表于 2021-11-15 21:09
抱歉,如果你已经是大佬,就不必故意发问这些简单问题来测试我们这些小弟。
你是想说我语法错误,还是表 ...

心疼,抚摸狗头{:10_276:}

快速收敛 发表于 2021-11-22 17:20:15

根据python官方文档注释,浮点格式化,小数点后的数码位数由精度决定,默认为 6。
print("%011f"%(9.9))
总长度11位,包含小数点,所以输出小数位补0为6位,前补0为4位
参考官方文档:https://docs.python.org/zh-cn/3/library/stdtypes.html#printf-style-string-formatting
页: [1]
查看完整版本: 哪位大佬帮帮我,这个为什么是0009.900000而不是000000009.9?