truncar redondear quitar para notacion multiplicacion imprimir entera decimales convertir cientifica binario algoritmo python floating-point string-formatting

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í:

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