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''