Quiero mostrar:
49
como 49.00
y:
54.9
como 54.90
Independientemente de la longitud del decimal o si hay lugares decimales, me gustaría mostrar un Decimal
con 2 decimales, y me gustaría hacerlo de manera eficiente. El propósito es mostrar valores monetarios.
p.ej, 4898489.00
python
string-formatting
orokusaki
fuente
fuente
Respuestas:
¿Supongo que probablemente estés usando los
Decimal()
objetos deldecimal
módulo? (Si necesita exactamente dos dígitos de precisión más allá del punto decimal con números arbitrariamente grandes, definitivamente debería serlo, y eso es lo que sugiere el título de su pregunta ...)Si es así, la sección de Preguntas frecuentes sobre decimales de los documentos tiene un par de preguntas / respuestas que pueden ser útiles para usted:
La siguiente pregunta dice
Si necesita la respuesta a eso (junto con mucha otra información útil), consulte la sección mencionada anteriormente de los documentos . Además, si mantiene su
Decimal
s con dos dígitos de precisión más allá del punto decimal (lo que significa tanta precisión como sea necesaria para mantener todos los dígitos a la izquierda del punto decimal y dos a la derecha y nada más ...), luego convertirlos en cadenasstr
funcionará bien:fuente
Debe usar las nuevas especificaciones de formato para definir cómo se debe representar su valor:
La documentación puede ser un poco obtusa a veces, por lo que recomiendo las siguientes referencias legibles:
.format()
formato de cadena de estilo nuevo%
formato de cadena de estilo antiguo con el.format()
formato de cadena de estilo nuevoPython 3.6 introdujo la interpolación literal de cadenas (también conocida como cadenas f), por lo que ahora puede escribir lo anterior aún más sucinto como:
fuente
format
devuelve unstr
, no unfloat
:print type({0:.2f}".format(pi))
devuelve<type 'str'>
.return
. Por favor, cambia mentalmente eso aprint
s."{:.2f}".format(pi)
0:
? Supongo que.
es parte de la cadena de pythonLa sección Operaciones de formato de cadenas de la documentación de Python contiene la respuesta que está buscando. En breve:
Algunos ejemplos:
fuente
0
después de la%
, y no hay necesidad de envolvernum
en untuple
.r = 1; "%s" % r; r = (1, 2); "%s" % r
versusr = 1; "%s" % (r,); r = (1,2 ); "%s" % (r,)
. Como tal, los estilos de codificación más sofisticados en python usan la tupla incondicional ahora (y Python 3 desaprobó todo el método de formateo de cadenas como propenso a errores).Puede usar el operador de formato de cadena de la siguiente manera:
No estoy seguro de lo que quiere decir con "eficiente": es casi seguro que este no es el cuello de botella de su aplicación. Si su programa se ejecuta lentamente, perfílelo primero para encontrar los puntos calientes y luego optimícelos.
fuente
Se puede cambiar
2
en2f
cualquier número de decimales que desea mostrar.EDITAR:
De
Python3.6
, esto se traduce en:fuente
.format es una forma más legible de manejar el formato variable:
fuente
En Python 3, una forma de hacerlo sería
fuente
si tienes múltiples parámetros puedes usar
fuente
Si está usando esto para la moneda, y también quiere que el valor esté separado por
,
's', puede usar$ {:,.f2}.format(currency_value)
.p.ej:
currency_value = 1234.50
$ {:,.f2}.format(currency_value)
-->
$ 1,234.50
Aquí hay un poco de código que escribí hace algún tiempo:
print("> At the end of year " + year_string + " total paid is \t$ {:,.2f}".format(total_paid))
fuente
El ejemplo de la forma más fácil para mostrarle cómo hacerlo es:
Código:
>>> points = 19.5
>>> total = 22
>>>'Correct answers: {:.2%}'.format(points/total)
``Salida: respuestas correctas: 88.64%
fuente
qué pasa
fuente