TransWikia.com

¿Cómo puedo hacer el marcador de posición de decimales ("%.2f") aleatorio?

Stack Overflow en español Asked by Ulises Antonio Chávez on February 17, 2021

Me surgió un problema y por ende una duda acerca del marcador de posición de decimales, ya que al intentar modificar el entero "%.2f" por "%.(entero)f" me arrojaba la consola el error ValueError: Format specifier missing precision

Fragmento de mi código:

from random import randint, randrange, choice, uniform
g1,g2,g3=randint(2,3), randrange(2,3), randrange(2,3)
for i in range(3):
    x1,y1,z1=('{0:.(g1)f}'.format(x), '{0:.(g2)f}'.format(y), '{0:.(g3)f}'.format(z))

Hay alguna forma de corregir este problema. Agradezco mucho su apoyo.

2 Answers

Puedes usar f-strings, que es lo más versátil y fácil de usar.

Un f-string es una letra "f" seguida de una cadena, como

print(f"El valor es {x}")

Lo especial es que si encierras algo entre corchetes, Python lo interpreta como una expresión, que es evaluada y sustituida dentro de la cadena.

En este ejemplo, si x = 10.12, entonces

print(f"El valor es {x}") -> El valor es 10.12

Si quieres formatear también la variable, agregas el formato separado por ":", asi:

print(f"El valor es {x:.1f}") -> El valor es 10.1

Ahora, quieres que el número de decimales sea variable, puedes reemplazar el :.1f por :.{n}f, quedando así:

valor = 12.3456
for n in range(4):
    print(f"{valor:.{n}f}")

produce:

12
12.3
12.35
12.346

Answered by Candid Moe on February 17, 2021

Si lo que quieres es manejar el numero de decimales puedes usar:

round(12.345, n)

Donde n es el numero de decimales que quieras.

Algo así entiendo:

from random import randint, randrange

g1,g2,g3=randint(2,3), randrange(2,3), randrange(2,3)

for i in range(3):
    x1,y1,z1 =(round(i, g1), round(i, g2), round(i, g3))

Answered by Mario Monroy on February 17, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP