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

har*_*jay 18 python string-formatting

如果我理解正确的文档,在python 2.6.5中,字符串格式"{0:d}"将与"%d"一样使用String.format()格式化字符串的方式

" I have {0:d} dollars on me ".format(100.113)
Run Code Online (Sandbox Code Playgroud)

应该打印"我有100美元对我"

但是我得到错误:

ValueError:类型为'float'的对象的未知格式代码'd'

其他格式操作确实有效.例如.

>>> "{0:e}".format(112121.2111)
'1.121212e+05'
Run Code Online (Sandbox Code Playgroud)

Jus*_*ugh 22

该错误表示您正在将float传递给期望整数的格式代码.请{0:f}改用.从而:

"I have {0:f} dollars on me".format(100.113)
Run Code Online (Sandbox Code Playgroud)

会给:

'I have 100.113000 dollars on me'
Run Code Online (Sandbox Code Playgroud)

  • 使用`"{0:.0f}".format(n)`如果你想要0个小数位. (25认同)
  • `"%d"%100.1`为我生成"100",没有错误.字符串格式化的新方法在这方面有所不同,但我认为我不希望它会隐式转换数据.至少如果你看到"{0:.0f}"`强制舍入是显而易见的. (9认同)
  • 感谢您的修复,但这似乎确实是一个怪癖。%d 会做正确的事情,并给我 100 的浮点数 100.111,但 :d 不会。 (4认同)

paj*_*ton 5

是的,你理解正确.但是你传递float(即100.113),而不是int.将其转换为int:int(100.113)或者只是通过100.