python - truncar - ¿Cómo puedo formatear un decimal para mostrar siempre 2 decimales?
truncar a 2 decimales python (8)
.format es una forma más legible de manejar el formato variable:
''{:.{prec}f}''.format(26.034, prec=2)
Quiero mostrar:
49
como 49.00
y:
54.9
como 54.90
Independientemente de la longitud del decimal o si hay decimales, me gustaría mostrar un Decimal
con 2 decimales, y me gustaría hacerlo de una manera eficiente. El objetivo es mostrar los valores monetarios.
por ejemplo, 4898489.00
Debe usar las nuevas especificaciones de formato para definir cómo debe representarse su valor:
>>> from math import pi # pi ~ 3.141592653589793
>>> ''{0:.2f}''.format(pi)
''3.14''
La documentación puede ser un poco obtusa a veces, por lo que recomiendo las siguientes referencias más fáciles de leer:
- el libro de cocina de formato de cadena de Python : muestra ejemplos del formato de cadena
.format()
estilo.format()
- pyformat.info : compara el formato de cadena
%
estilo antiguo con el formato de cadena.format()
estilo.format()
Python 3.6 introdujo la interpolación de cadenas literales (también conocida como cadenas de caracteres f) por lo que ahora puede escribir lo anterior de manera más sucinta como:
>>> f''{pi:.2f}''
''3.14''
La sección Operaciones de formato de cadena de la documentación de Python contiene la respuesta que está buscando. En breve:
"%0.2f" % (num,)
Algunos ejemplos:
>>> "%0.2f" % 10
''10.00''
>>> "%0.2f" % 1000
''1000.00''
>>> "%0.2f" % 10.1
''10.10''
>>> "%0.2f" % 10.120
''10.12''
>>> "%0.2f" % 10.126
''10.13''
Puede usar el operador de formateo de cadena de la siguiente manera:
num = 49
x = "%.2f" % num # x is now the string "49.00"
No estoy seguro de lo que quiere decir con "eficiente": es casi seguro que no es el cuello de botella de su aplicación. Si su programa se está ejecutando lentamente, píntelo primero para encontrar los puntos calientes y luego optimícelos.
Supongo que probablemente esté usando los objetos Decimal()
del módulo decimal
. (Si necesita exactamente dos dígitos de precisión más allá del punto decimal con números arbitrariamente grandes, definitivamente debe ser así, y eso es lo que sugiere el título de su pregunta ...)
Si es así, la sección de Preguntas Frecuentes Decimal de los documentos tiene un par pregunta / respuesta que puede ser útil para usted:
P. En una aplicación de punto fijo con dos decimales, algunas entradas tienen muchos lugares y deben redondearse. Se supone que otros no tienen dígitos en exceso y necesitan ser validados. ¿Qué métodos deberían usarse?
A. El método quantize () se redondea a un número fijo de decimales. Si se establece la trampa inexacta, también es útil para la validación:
>>> TWOPLACES = Decimal(10) ** -2 # same as Decimal(''0.01'')
>>> # Round to two places
>>> Decimal(''3.214'').quantize(TWOPLACES)
Decimal(''3.21'')
>>> # Validate that a number does not exceed two places
>>> Decimal(''3.21'').quantize(TWOPLACES, context=Context(traps=[Inexact]))
Decimal(''3.21'')
>>> Decimal(''3.214'').quantize(TWOPLACES, context=Context(traps=[Inexact]))
Traceback (most recent call last):
...
Inexact: None
La siguiente pregunta dice
P. Una vez que tengo entradas de dos lugares válidas, ¿cómo mantengo esa invariante a través de una aplicación?
Si necesita la respuesta a eso (junto con mucha otra información útil), consulte Decimal() . Además, si mantiene sus Decimal
con dos dígitos de precisión más allá del punto decimal (es decir, tanta precisión como sea necesario para mantener todos los dígitos a la izquierda del punto decimal y dos a la derecha y no más ...) , luego convertirlos a cadenas con str
funcionará bien:
str(Decimal(''10''))
# -> ''10''
str(Decimal(''10.00''))
# -> ''10.00''
str(Decimal(''10.000''))
# -> ''10.000''
qué pasa
print round(20.2564567 , 2) >>>>>>> 20.25
print round(20.2564567 , 4) >>>>>>> 20.2564
si tiene múltiples parámetros, puede usar
print(''some string {0:.2f} & {1:.2f}''.format(1.1234,2.345))
>>> some string 1.12 & 2.35
>>> print "{:.2f}".format(1.123456)
1.12
Puede cambiar 2
en 2f
a cualquier número de decimales que quiera mostrar.
EDITAR:
Desde Python3.6
, esto se traduce en:
>>> print(f"{1.1234:.2f}")
1.12