Este es mi código:
print str(float(1/3))+'%'
y eso nos muestra:
0.0%
pero quiero conseguir 33%
¿Que puedo hacer?
python
python-2.x
zjm1126
fuente
fuente
1/3
en su caso), tiene un valor por unidad que tiene que multiplicarlo100
para obtener un valor porcentual . Vea las otras respuestas para la diferencia entre la división entera y flotante.print(str(float(1/3))+'%')
imprimirá0.3333333333333333%
, aún no es exactamente lo que quieres, pero al menos está un poco más cerca. Esto se debe a que la división funciona de manera diferente en esa versión.Respuestas:
format
admite un tipo de precisión de coma flotante porcentual :Si no desea la división de enteros, puede importar la división de Python3 desde
__future__
:fuente
float(1)
realmente más pitónico que1.
?1.0
lugar defloat(1)
o1.
. En mi humilde opinión, es menos molesto que el primero y no tan sutil como el segundo.Hay una opción de formato de 'porcentaje' más conveniente para el
.format()
método de formato:fuente
"%.1f"
formato de la vieja escuela ?print("%.1f%%" % (100 * 1.0/3))
format
ya sabe imprimir porcentajes!f"{1/3.0:.1%}"
Solo por completo, ya que noté que nadie sugirió este enfoque simple:
Detalles:
%.0f
significa " imprimir un flotador con 0 decimales ", por%.2f
lo que imprimiría33.33
%%
Imprime un literal%
. Un poco más limpio que tu original+'%'
1.0
en lugar de1
hacerse cargo de obligar a la división a flotar, así que no más0.0
fuente
1/3
. El orden de evaluación es intencional:100.0 * 1 / 3 => 100.0 / 3 => 0.33...
100
al1
para dejar las cosas claras..format()
y el%
formateo, también conocido como interpolación de cadenas en Python, es una alternativa perfectamente válida.Está dividiendo enteros y luego convirtiendo en flotante. Dividir por carrozas en su lugar.
Como beneficio adicional, use los increíbles métodos de formato de cadenas descritos aquí: http://docs.python.org/library/string.html#format-specification-mini-language
Para especificar un porcentaje de conversión y precisión.
Una gran joya!
fuente
Solo para agregar la solución Python 3 f-string
fuente
Entonces querrás hacer esto en su lugar:
El los
.0
denota como flotadores y luego losint()
redondea a enteros nuevamente.fuente
int()
no se redondea. por ejint(1.9) != 2
. El redondeo se puede hacer así:round(1.9,0) == 2
int()
Ciertamente hace ronda por el número. Mi ejemplo hace exactamente lo que quise que hiciera; cortando los dígitos ya que eso era lo que quería el OP.int()
deja caer los dígitos No se redondea hacia abajo. El redondeo implica que hace algo con los dígitos. Sin embargo, el resultado final es el mismo; en ese sentido, entiendo tu punto. Además, el OP no aclara qué quiere hacer con los dígitos tiene 33.333 ... se redondea a 33. ¡Gracias por responder a mi comentario y que tenga un gran día!