2011-04-11 156 views
9

如果我正確理解文檔,請在python 2.6.5字符串格式「{0:d}」會做同樣爲「%d」用的String.format()格式字符串的方式使用「{0:d}」格式化字符串格式爲'float'類型的對象提供未知格式代碼'd'

" I have {0:d} dollars on me ".format(100.113) 

應打印「我有100美元的我」

但是我得到的錯誤:

ValueError: Unknown format code 'd' for object of type 'float'

其他格式的操作可以工作。

>>> "{0:e}".format(112121.2111) 
'1.121212e+05' 

回答

12

該錯誤表示您正在向期望整數的格式代碼傳遞一個浮點數。 改爲使用{0:f}。因此:

"I have {0:f} dollars on me".format(100.113) 

會給:

'I have 100.113000 dollars on me' 
+17

使用' 「{0:.0f}」 制(n)'如果你想0位小數。 – 2011-04-11 21:14:29

+0

感謝您的解決,但它確實看起來像這是一個怪癖。 %d會做正確的事情,給我100 100.111的浮點數,但是:d不會。 – harijay 2011-04-11 21:20:07

+0

對不起賈斯汀,我的意思是這是一個以python爲中心的怪癖 – harijay 2011-04-11 21:28:54

3

是的,你正確理解。但是您通過float(即100.113),而不是int。將其轉換爲intint(100.113)或只是通過100

+0

這比'「{:.0f}」'效果更好,因爲'int()''rounds'like'%d'和'.0f'不會。例如。格式(1.6)==「%d」%1.6'將會引發''{:d}「格式(int(1.6))==」%d「%1.6'將不會。但是,如果你需要事先傳遞格式字符串,例如。到一個格式化程序,並且不能控制它的源代碼,而不能執行'int()'。 (好吧,他們要麼用'%'或者'.format') – n611x007 2015-09-04 08:12:34

-1

刪除 'd',因爲對象類型可能不是一個數量在我的情況

+0

雖然洪丁有點不對勁,但考慮到這是唯一與SO有關的錯誤消息'Unknown format code'd'的問題'XXX'類型的對象,值得一提的是,如果你使用'{}'而不是'{d}',你不必猜測出現了什麼問題,並且能夠看到幕後發生了什麼。 (我想這就是他提供「錯誤」答案的原因:因爲錯誤消息是相同的。) – 8day 2017-07-18 05:15:50

相關問題