2011-04-11 15 views
9

Si entendí los documentos correctamente, en el formato de cadena de pitón 2.6.5 "{0: d}" haría lo mismo que "% d" con el String.Format() forma de cadenas de formatoFormato de cadena con el formato "{0: d}". Código de formato desconocido 'd' para el objeto de tipo 'float'

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

debe imprimir "tengo 100 dólares en mí"

Sin embargo me sale el error:

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

Las otras operaciones de formato funcionan.por ej.

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

Respuesta

12

Ese error indica que está pasando un float al código de formato esperando un entero. Use {0:f} en su lugar. Por lo tanto:

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

dará:

'I have 100.113000 dollars on me' 
+17

Use ' "{0: .0f}". Formato (n)' si quieres 0 decimales. –

+0

Gracias por la corrección, pero parece que esto es un capricho. El% d haría lo correcto y me daría 100 para un flotador 100.111, pero el: d no. – harijay

+0

Lo siento Justin, quise decir que esto es una peculiaridad centrada en Python – harijay

3

Sí, entendido correctamente. Sin embargo, está pasando float (es decir, 100.113), no int. O conviértalo a int: int(100.113) o simplemente pase 100.

+0

esto funciona mejor que '" {: .0f} "', porque 'int()' 'rondas' como '% d' y' .0f' no. p.ej. 'assert" {: .0f} ". format (1.6) =="% d "% 1.6' se levantará,' "{: d}". format (int (1.6)) == "% d"% 1.6' no lo hará Pero si necesita pasar la cadena de formato de antemano, por ejemplo. a un formateador y no tiene control sobre su fuente que usted no puede hacer el 'int()'. (Bueno, de todos modos harían '%' o '.format') – n611x007

-1

delete 'd', ya que el tipo de objeto podría no ser un número que en mi caso

+0

Aunque Hong Ding está un poco equivocado, considerando que esta es la única pregunta sobre SO que está relacionada con el mensaje de error' Código de formato desconocido 'd' para objeto del tipo 'XXX'', vale la pena mencionar que si usará '{}' en lugar de '{d}' no tendrá que adivinar lo que está mal y podrá ver lo que está sucediendo detrás de las escenas . (Supongo que es por eso que proporcionó la respuesta "incorrecta": porque el mensaje de error es similar). – 8day

Cuestiones relacionadas