redondear - Forma más Pythonic para imprimir*como máximo*un número de lugares decimales
truncar a 2 decimales python (3)
Esta pregunta ya tiene una respuesta aquí:
- Formateo de flotantes en Python sin ceros superfluos 13 respuestas
Quiero formatear una lista de números de coma flotante con un máximo de, digamos, 2 decimales. Pero, no quiero los ceros al final, y no quiero los puntos decimales finales.
Entonces, por ejemplo, 4.001
=> 4
, 4.797
=> 4.8
, 8.992
=> 8.99
, 13.577
=> 13.58
.
La solución simple es (''%.2f'' % f).rstrip(''.0'')
(''%.2f'' % f).rstrip(''0'').rstrip(''.'')
. Pero, eso se ve bastante feo y parece frágil. ¿Alguna solución más agradable, tal vez con algunas banderas de formato mágico?
El formateador g
limita el resultado a n
dígitos significativos, soltando ceros finales:
>>> "{:.3g}".format(1.234)
''1.23''
>>> "{:.3g}".format(1.2)
''1.2''
>>> "{:.3g}".format(1)
''1''
En general, trabajar con String [s] puede ser lento. Sin embargo, esta es otra solución:
>>> from decimal import Decimal
>>> precision = Decimal(''.00'')
>>> Decimal(''4.001'').quantize(precision).normalize()
Decimal(''4'')
>>> Decimal(''4.797'').quantize(precision).normalize()
Decimal(''4.8'')
>>> Decimal(''8.992'').quantize(precision).normalize()
Decimal(''8.99'')
>>> Decimal(''13.577'').quantize(precision).normalize()
Decimal(''13.58'')
Puede encontrar más información aquí: http://docs.python.org/2/library/decimal.html
Necesita separar el 0
y el .
pelar; de esa manera, nunca perderás el 0
natural.
Alternativamente, use la función format()
, pero eso realmente se reduce a lo mismo:
format(f, ''.2f'').rstrip(''0'').rstrip(''.'')
Algunas pruebas:
>>> def formatted(f): return format(f, ''.2f'').rstrip(''0'').rstrip(''.'')
...
>>> formatted(0.0)
''0''
>>> formatted(4.797)
''4.8''
>>> formatted(4.001)
''4''
>>> formatted(13.577)
''13.58''
>>> formatted(0.000000000000000000001)
''0''
>>> formatted(10000000000)
''10000000000''