[pyar] Valores incorrectos

Diego E. Ahumada eddie.cpp en gmail.com
Vie Oct 15 18:28:55 ART 2010


2010/10/15 Cristian Segura <ska.python en gmail.com>

> Buenas chicos, mi primer duda a la lista :P
>
> Estaba resolviendo un ejercicio, y me surgió un problema. El ejercicio en
> cuestión es el siguiente:
>
> "Dada una cantidad de dinero, indicar como repartir el vuelto de manera que
> se utilice la menor cantidad de monedas"
>
> El código que tengo es el siguiente:
>
> b = (100, 50, 20, 10, 5, 2, 1, .5, .25, .1, .05)
>
> v = float(raw_input("Ingrese vuelto: "))
> i = 0
> j = 0
> l = len(b)
>
> while i != l:
>     while v - b[i] >= 0:
>         v -= b[i]
>         j += 1
>     if j != 0:
>         print j, " billetes/monedas de ", b[i]
>         print "El valor restante es: ", v    # Esta unicamente para
> comprobar los resultados
>     j = 0
>     i += 1
>
> La salida del script utilizando como valor 1807.35 es:
>
> 18  billetes/monedas de  100
> El valor restante es:  7.35
> 1  billetes/monedas de  5
> El valor restante es:  2.35
> 1  billetes/monedas de  2
> El valor restante es:  0.35
> 1  billetes/monedas de  0.25
> El valor restante es:  0.0999999999999
> 1  billetes/monedas de  0.05
> El valor restante es:  0.0499999999999
>
>  Mi pregunta es, por que al hacer la resta 0.35-0.25 devuelve 0.09 y no
> 0.1?
>
> Un saludo y gracias
>
>
> El problema se debe a cómo python y las computadoras en general manejan los
números de coma flotante. La respuesta precisa la encontrás en:
http://docs.python.org/tutorial/floatingpoint.html

Las alternativas son utilizar el módulo 'decimal' (from decimal import *), o
hacer, por ejemplo, round(3.5-2.5,2).

Diego.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20101015/37487bed/attachment.html>


More information about the pyar mailing list