2012-03-04 12 views
5

que tenga un precio dólar como Decimal con una precisión de .01formato de cadenas en Python: Mostrar un precio sin puntos decimales

quiero mostrarla en formato de cadenas, como tener un mensaje (al céntimo.) "You have just bought an item that cost $54.12."

la cosa es, si el precio pasa a ser redonda, quiero simplemente mostrarla sin los centavos, como $54.

¿Cómo puedo lograr esto en Python? Tenga en cuenta que estoy usando Python 2.7, por lo que me gustaría utilizar el formato de cadenas de estilo nuevo en lugar del estilo antiguo.

+0

Mira esta respuesta de [Eliminación de ceros a la derecha en Python] (http://stackoverflow.com/a/5808014/63011) –

+0

@PaoloMoretti: I no querría un algoritmo Me gustaría usar las facultades integradas de Python. Si es imposible, crearé mi propio algoritmo. –

Respuesta

1

me gustaría hacer algo como esto:

import decimal 

a = decimal.Decimal('54.12') 
b = decimal.Decimal('54.00') 

for n in (a, b): 
    print("You have just bought an item that cost ${0:.{1}f}." 
      .format(n, 0 if n == n.to_integral() else 2)) 

donde {0:.{1}f} medios imprimir el primer argumento como un flotador usando el número de decimales en el segundo argumento y el segundo argumento es 0 cuando el número es en realidad igual a su versión entera y 2 cuando no es lo que creo que es lo que estás buscando.

La salida es:

acaba de comprar un artículo que cuesta $ 54.12.

acaba de comprar un artículo que cuesta $ 54

+4

No creo que eso sea lo que él quiere. Quiere '$ 54.12' como producción. Solo si el valor es '54.00' quiere que se corten los decimales. –

+0

¿Qué ventaja agrega el módulo 'decimal'? Parece inútil. – Zenon

+2

@ Zenon: de [la documentación] (http://docs.python.org/library/decimal.html): "A diferencia del punto flotante binario basado en hardware, el módulo' decimal' tiene una precisión modificable por el usuario (predeterminado a 28 lugares) que puede ser tan grande como sea necesario para un problema determinado ". – bernie

6
>>> import decimal 
>>> n = decimal.Decimal('54.12') 
>>> print('%g' % n) 
'54.12' 
>>> n = decimal.Decimal('54.00') 
>>> print('%g' % n) 
'54' 
+0

Funciona con 'decimal.getcontext(). Prec = 2' ... – ezod

+0

@DavidHall: Oye, tienes razón. Lo siento. Me retractaré de mi comentario anterior. Curiosamente, el nuevo lenguaje de formato no funciona de esta manera: '" {0: g} ". Format (decimal.Decimal (" 54.00 "))' devuelve '54.00'! –

+0

Tienes razón, mi error. –

-1
>>> dollars = Decimal(repr(54.12)) 
>>> print "You have just bought an item that cost ${}.".format(dollars) 
You have just bought an item that cost $54.12. 
+0

Ya obtengo el valor como 'Decimal', no lo codifico ... –

0

¿Es esto lo que quieres?

Nota: x es el precio original.

round = x + 0.5 
s = str(round) 
dot = s.find('.') 
print(s[ : dot]) 
+0

Es un algoritmo. No me gustaría un algoritmo. Me gustaría usar las facultades integradas de Python. Si es imposible, usaré un algoritmo. –

1

respuesta se toma de Python Decimals format

>>> a=54.12 
>>> x="${:.4g}".format(a) 
>>> print x 
    $54.12 
>>> a=54.00 
>>> x="${:.4g}".format(a) 
>>> print x 
    $54 
+0

Respuesta tomada de http://stackoverflow.com/questions/2389846/python-decimals-format – redratear

Cuestiones relacionadas