如果我理解文档正确,在python 2.6.5中,字符串格式“{0:d}”将与“%d”一样使用String.format()格式化字符串的方式
" I have {0:d} dollars on me ".format(100.113)
应该打印“我有100美元在我身上”
然而我收到错误:
ValueError:未知格式代码'd' 对于'float'类型的对象
其他格式操作可以正常工作。例如。
>>> "{0:e}".format(112121.2111)
'1.121212e+05'
答案 0 :(得分:20)
该错误表示您正在将float传递给期望整数的格式代码。
请改用{0:f}
。因此:
"I have {0:f} dollars on me".format(100.113)
会给:
'I have 100.113000 dollars on me'
答案 1 :(得分:5)
是的,你理解正确。但是,您传递的是float
(即100.113
),而不是int
。将其转换为int
:int(100.113)
或者只是传递100
。
答案 2 :(得分:0)
当使用 format()
或 f-string(格式化字符串)时,没有从 float
到 int
的自动转换。所以假设预期的输出是:
I have 100 dollars on me
要使用的正确格式规范是 :.0f
表示带有 0 个十进制数字的浮点数,它将为您向上/向下舍入数字:
"I have {0:.0f} dollars on me".format(100.113)
显示舍入的一些示例:
a = 13.1
b = 13.9
f'{a:.0f}' # 13
f'{b:.0f}' # 14
'{0:.0f}'.format(a) # 13
'{0:.0f}'.format(b) # 14
'{:.0f}'.format(a) # 13
'{:.0f}'.format(b) # 14
答案 3 :(得分:-2)
删除' d',因为对象类型可能不是我的情况下的数字