使用“{0:d}”。格式的字符串格式为“float”类型的对象提供未知格式代码“d”

时间:2011-04-11 21:10:37

标签: python string-formatting

如果我理解文档正确,在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'

4 个答案:

答案 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。将其转换为intint(100.113)或者只是传递100

答案 2 :(得分:0)

当使用 format() 或 f-string(格式化字符串)时,没有从 floatint 的自动转换。所以假设预期的输出是:

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',因为对象类型可能不是我的情况下的数字