La pregunta es para Python 2.6, eso es lo que tenemos en producción.Cómo formatear un número con coma y dígitos de precisión especificados en Python
Tengo este requisito para formatear un número (como 1234567.0987 o 1234567.0) con una coma, y el número especificado de dígitos después de los puntos decimales. Entonces, si la precisión es tres, 1234567.0987 puede parecerse a 1,234,567.099.
He intentado usar la configuración regional, como se sugiere en las respuestas a muchas preguntas, el problema es que da como resultado dos dígitos después del decimal, lo que no es aceptable para mi requisito.
He intentado buscar en otros lugares, pero no encontró ninguna solución, y finalmente creó un método por mi propia:
def format_float(value, precision = 4):
formatString = "%0." + str(precision) + "f"
str_val = formatString % value
first, second = str_val.split('.')
first = int(first)
group = []
while True:
result, mod = first/1000, first % 1000
group.append(str(mod))
if result == 0:
break
first = result
group.reverse()
return ','.join(group) + '.' + second
Traté de correr algunas pruebas para probar el método y funciona bien :
# default 4 digits precision
assert format_float(1234567890.0876543) == '1,234,567,890.0877'
assert format_float(1.2) == '1.2000'
assert format_float(1234) == '1,234.0000'
assert format_float(0) == '0.0000'
# 3 digits precision
assert format_float(1234567890.0876543, precision=3) == '1,234,567,890.088'
assert format_float(0, precision=3) == '0.000'
Siendo nuevo en Python, mi pregunta es si esta es una solución aceptable. Como este formato tiene que hacerse muchas veces en un apretado ciclo, agradecería que alguien pueda señalar una mejor solución.
Gracias y Saludos a todos
Pruébalo con '1000000'. –
Mark, gracias. Ese es un buen error, necesito arreglar esto. – cspider
No tiene que usar el módulo 'locale'. Ver mi respuesta a la pregunta [_¿Cuál es la forma más fácil de agregar comas a un número entero en Python? _] (Http://stackoverflow.com/q/3909457/355230). – martineau