Problema con ejercicio en Python


Estado
Cerrado para nuevas respuestas.

mtz0

Hablar de más indica mucha ignorancia.
Noderador
Nodero
Noder
Buenas, estaba haciendo una especie de conversor de divisa muy simple, de euros a dólares y de dólares a euros. El caso es que quiero redondear el resultado a dos decimales, y no se por qué no me deja.

1585778726136.png


1585778764970.png
 
  • Like
Reacciones : destapeman

KTaneR

Activo muy miembro
Burgués de Nodo
Noderador
Nodero
Noder
No se nada de python, pero creo que es porque estas haxiendo el round al aire, o sea o lo metes en el print o lo asignas a la misma variable es decir variable = round(variable)
 

destapeman

FUCK PUSSYS, YES BADASS
Moderador
Paladín de Nodo
Jinete de Nodo
Burgués de Nodo
Noderador
Nodero
Noder
El problema lo tienes en el mal uso de la coma flotante:

Depende del uso que le quieras dar. Si es para imprimirlo por la pantalla, podrías hacer por ejemplo (si el valor está en la variable valor)
Python:
f"{valor:.2f}"

Ese .2f en la cadena de formato está especificando lo que tú quieres: representar un número en coma flotante con hasta dos decimales, como mucho.
Si lo que quieres es hacer cálculos con el número, podrías usar round:
Python:
[LIST=1]
[*]>>> round(2.3145, 2)
[*]2.31
[/LIST]
pero hay que tener mucho cuidado con los cómputos que vas a hacer, sobre todo si estás pensando hacer cálculo financiero, porque la coma flotante tiene varios aspectos un poco inesperados (si no sabes cómo funciona la coma flotante en sí… y a veces incluso si sabes) y es posible que alguno de los números con los que estés trabajando no pueda representarse de manera exacta. Ejemplo:
Python:
[LIST=1]
[*]>>> 0.1 * 3
[*]0.30000000000000004
[/LIST]
Esto es un artefacto ineludible, porque "0.1" no se puede codificar de manera exacta en base 2. Aunque Python esté imprimiendo "0.1", eso es porque descarta dígitos automáticamente. Ejemplo:
Python:
>>> f"{0.1:.30f}"
'0.100000000000000005551115123126'

En casos en que necesites números exactos, con precisión definida, usa en su lugar un módulo que te permita trabajar con números de aritmética decimal de coma fija (por ejemplo, decimal)

ENLACE A LA FUENTE: https://es.quora.com/En-Python-cómo-se-puede-redondear-un-float-con-dos-decimales
 
  • Like
Reacciones : cbrn

destapeman

FUCK PUSSYS, YES BADASS
Moderador
Paladín de Nodo
Jinete de Nodo
Burgués de Nodo
Noderador
Nodero
Noder
@mtz0 si te ha funcionado respóndeme please,

Muevo el post a Programación > Python que es donde debería estar,

Un saludo noder
 

mtz0

Hablar de más indica mucha ignorancia.
Noderador
Nodero
Noder
En casos en que necesites números exactos, con precisión definida, usa en su lugar un módulo que te permita trabajar con números de aritmética decimal de coma fija (por ejemplo, decimal)

Vale, he importado el módulo "Decimal", pero ahora no me deja ejecutar el archivo desde el cmd.
Pero lo que no me queda claro es, ahora como puedo redondear el resultado de: cantidad_convertida = cantidad_a_convertir * 0.91 para que solo den dos decimales como máximo, es decir con round (cantidad_convertida, 2) me debería dejar ¿no?
 

KTaneR

Activo muy miembro
Burgués de Nodo
Noderador
Nodero
Noder
No se nada de python, pero creo que es porque estas haxiendo el round al aire, o sea o lo metes en el print o lo asignas a la misma variable es decir variable = round(variable)
supongo que ni has probado mi solucion, ya que no me has dicho nada, pero acabo de descargar python para probarlo y a mi me redondea tu programa como te he dicho
 

mtz0

Hablar de más indica mucha ignorancia.
Noderador
Nodero
Noder
supongo que ni has probado mi solucion, ya que no me has dicho nada, pero acabo de descargar python para probarlo y a mi me redondea tu programa como te he dicho
Es cierto perdona ajajaja la leí pero se me olvidó por completo. El caso es que al hacer "print(round (cantidad_convertida, 2))" sí me deja, pero yo quiero mostrar un mensaje que imprima por pantalla: 100€ = 110$ por ejemplo, y eso se haría concatenando las variables y texto, y ahí no me deja usar la función round. Así es como quedaría la línea de código:
Código:
print(round(cantidad_a_convertir),2) + "€ = " +str(cantidad_convertida)+ "$")
 

KTaneR

Activo muy miembro
Burgués de Nodo
Noderador
Nodero
Noder
Es cierto perdona ajajaja la leí pero se me olvidó por completo. El caso es que al hacer "print(round (cantidad_convertida, 2))" sí me deja, pero yo quiero mostrar un mensaje que imprima por pantalla: 100€ = 110$ por ejemplo, y eso se haría concatenando las variables y texto, y ahí no me deja usar la función round. Así es como quedaría la línea de código:
Código:
print(round(cantidad_a_convertir),2) + "€ = " +str(cantidad_convertida)+ "$")

Dos formas de hacerlo:
1. Como lo tenias pero añadiendo el round dentro del str(round(...)) (ya que ahi lo tienes sin str que aparece en el codigo original)

2. Haz el round antes del print como lo tienes pero sobrescribe la variable.

Convertida = round(comvertida, 2)
 
  • Like
Reacciones : destapeman

KTaneR

Activo muy miembro
Burgués de Nodo
Noderador
Nodero
Noder
Y no se si te has fijado pero en el codigo que pasas tienes un print antes del round con lo cual nunca va a funcionar
 
  • Like
Reacciones : destapeman

mtz0

Hablar de más indica mucha ignorancia.
Noderador
Nodero
Noder
Dos formas de hacerlo:
1. Como lo tenias pero añadiendo el round dentro del str(round(...)) (ya que ahi lo tienes sin str que aparece en el codigo original)

2. Haz el round antes del print como lo tienes pero sobrescribe la variable.

Convertida = round(comvertida, 2)
Okey ahora si jaajja mazo gracias. Soy gilipollas y estaba poniendolo al revés, en vez de:
Código:
convertida = round(cantidad_convertida,2)

    print(str(cantidad_a_convertir) + "€ = " +str(convertida)+ "$")

estaba poniendo:

Código:
convertida = round(cantidad_convertida,2)
        
        print(str(convertida) + "€ = " +str(cantidad_a_convertir)+ "$")

por eso pensaba que no funcionaba xD. Mazo gracias de nuevo eres un genioo <3
 
  • Like
Reacciones : destapeman y KTaneR
Estado
Cerrado para nuevas respuestas.