2011-03-03 22 views
23

utilizar Python v2, tengo un valor corriendo a través de mi programa que pone a un número redondeado a 2 decimales al final:Python Añadir comas en el número de cuerdas

así:

print ("Total cost is: ${:0.2f}".format(TotalAmount)) 

¿Hay alguna manera de insertar un valor de coma cada 3 dígitos a la izquierda del punto decimal?

Es decir: 10.000,00 10.000,00 convierte o se convierte en 1.000.000,00 1.000.000,00

Gracias por cualquier ayuda.

+7

The Woo: cuatro preguntas en menos de una hora sobre el mismo tema. Estás terminando un poco tu tarea. Bravo. – joaquin

Respuesta

50

En Python 2.7 o superior, puede utilizar

print ("Total cost is: ${:,.2f}".format(TotalAmount)) 

Esto está documentado en PEP 378.

(A partir de su código, no puedo decir cuál es la versión de Python que esté utilizando.)

+0

Lo siento, estoy usando v2 –

+0

Pero ese código también funciona en la versión 2. Gracias. –

+0

Esto es claramente una tarea. No es que tenga ningún problema con él, pero: 1). En realidad, no enseña nada al OP. 2). Esto convierte a SO en un refugio para responder a las preguntas de la tarea. – user225312

4
'{:20,.2f}'.format(TotalAmount) 
14

usted podría utilizar locale.currency si TotalAmount representa dinero. Funciona en Python 2.7 < también:

>>> locale.setlocale(locale.LC_ALL, '') 
'en_US.utf8' 
>>> locale.currency(123456.789, symbol=False, grouping=True) 
'123,456.79' 

Nota: no funciona con la configuración regional C lo que debe establecer algún otro local antes de llamar.

2

Esto no es particularmente elegante, pero debería funcionar también:

a = "1000000.00" 
e = list(a.split(".")[0]) 
for i in range(len(e))[::-3][1:]: 
    e.insert(i+1,",") 
result = "".join(e)+"."+a.split(".")[1] 
+1

Buena solución para una tarea. – Wok

5

si está utilizando Python 3 o superior, aquí es una manera más fácil para insertar una coma:

Primera forma

value = -12345672 
print (format (value, ',d')) 

u otra manera

value = -12345672 
print ('{:,}'.format(value)) 
+0

Probablemente los valores serían flotantes, no enteros, por lo que sería 'format (value,", f ")' – mehtunguh

2

Una función que trabaja en python2.7 + o python3.1 +

def comma(num): 
    '''Add comma to every 3rd digit. Takes int or float and 
    returns string.''' 
    if type(num) == int: 
     return '{:,}'.format(num) 
    elif type(num) == float: 
     return '{:,.2f}'.format(num) # Rounds to 2 decimal places 
    else: 
     print("Need int or float as input to function comma()!") 
0

Las respuestas anteriores son mucho más agradable que el código que estaba usando en mi proyecto (no-tarea):

def commaize(number): 
    text = str(number) 
    parts = text.split(".") 
    ret = "" 
    if len(parts) > 1: 
     ret = "." 
     ret += parts[1] # Apparently commas aren't used to the right of the decimal point 
    # The -1 offsets to len() and 0 are because len() is 1 based but text[] is 0 based 
    for i in range(len(parts[0]) - 1,-1,-1): 
     # We can't just check (i % 3) because we're counting from right to left 
     # and i is counting from left to right. We can overcome this by checking 
     # len() - i, although it needs to be adjusted for the off-by-one with a -1 
     # We also make sure we aren't at the far-right (len() - 1) so we don't end 
     # with a comma 
     if (len(parts[0]) - i - 1) % 3 == 0 and i != len(parts[0]) - 1: 
      ret = "," + ret 
     ret = parts[0][i] + ret 
    return ret 
+0

"Las respuestas anteriores son mucho más agradables que el código que estaba usando" - Si las respuestas existentes son mejores, entonces no hay necesidad de publicar una respuesta de menor calidad. Además, esta publicación ya tiene una respuesta aceptada. – avojak

+0

En ese momento estaba pensando que sería útil para los futuros usuarios de Google, ya que no tenía la versión mínima de Python que tenían algunas de las otras respuestas. Sobre otra revisión de las respuestas veo que ya hay una. – QBFreak

Cuestiones relacionadas