Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Residuo de una division entre un numero flotante y un entero

Estas en el tema de Residuo de una division entre un numero flotante y un entero en el foro de Python en Foros del Web. Hola amigos buenas tardes, actualmente estoy haciendo unos ejercicios en python y parte de uno de ellos me solicita que desconponga un numero decimal y ...
  #1 (permalink)  
Antiguo 28/02/2015, 12:14
 
Fecha de Ingreso: diciembre-2012
Ubicación: Lima
Mensajes: 37
Antigüedad: 11 años, 11 meses
Puntos: 0
Pregunta Residuo de una division entre un numero flotante y un entero

Hola amigos buenas tardes, actualmente estoy haciendo unos ejercicios en python y parte de uno de ellos me solicita que desconponga un numero decimal y muestre la parte entera separada de la parte decimal.

El punto es, que e estado realizando pruebas directas en la consola de pyhton encontrando el sigiuente detalle que me tiene confundido. Por ejemplo utilice el numero 6.4 y al dividirlo entre 1 utilizando el operador "//" me arrojo la parte entera sin inconveniente, pero al utilizar el operador "%" no me arroja la parte decimal la cual deveria de ser 0.4 sino que me arroja 0.40000000000000036 lo cual me causa intriga, ya que solo el resultado deveria ser directamente 0.4

Código Python:
Ver original
  1. >>> 6.4//1
  2. 6.0
  3. >>> 6.4%1
  4. 0.40000000000000036
  5. >>> 10.0//1
  6. 10.0
  7. >>> 10.0%1
  8. 0.0
  9. >>>

Alguien podria indicarme porque sucede esto.

Ya que queria obtener solo 0.4 de resultado por lo cual intente lo siguiente pero tampoco a funcionado.

Código Python:
Ver original
  1. >>> 6.4 - (6.4//1)
  2. 0.40000000000000036
  3. >>>
Obs: Actualmente estoy utilizando la version 3.4.2 de Python.

Gracias por su respuestas.
__________________
**********
I can do it !!!
**********
  #2 (permalink)  
Antiguo 28/02/2015, 12:33
Avatar de 12trunks12  
Fecha de Ingreso: noviembre-2014
Mensajes: 41
Antigüedad: 10 años
Puntos: 1
Respuesta: Residuo de una division entre un numero flotante y un entero

Bueno no se si pasa esto en otros lenguajes de programación pero en este los decimales, o mas bien flotantes, son pecualiares. Por ejemplo prueba a sumar 0.1 + 0.2, si quieres sumar exactamente los valores que quieras tienes que import la librería decimal:
Código:
from decimal import Decimal
Decimal('0.1') + Decimal('0.2')
Fíjate que los números están entre comillas, es decir de tipo string, porque sino estarías pasando el 0.1 de tipo float y con esos decimales 'raros' que no necesitas a decimal y sería como no hacer nada.
  #3 (permalink)  
Antiguo 28/02/2015, 12:59
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Residuo de una division entre un numero flotante y un entero

Esto pasa no solo en Python si no en muchos otros lenguajes y mas generalmente cualquier cosa que use IEEE 754.

Hay una lectura extensa que te explica todo esto.
http://docs.oracle.com/cd/E19957-01/..._goldberg.html

También existe la versión especifica para python y tal vez no me crean esto*, pero esta en documentación.
https://docs.python.org/2/tutorial/floatingpoint.html


* sarcasmo
  #4 (permalink)  
Antiguo 28/02/2015, 13:22
 
Fecha de Ingreso: diciembre-2012
Ubicación: Lima
Mensajes: 37
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Residuo de una division entre un numero flotante y un entero

Gracias por sus respuestas 12trunks12 y razpeitia

Procedi a realizar la prueba utilizando la importacion de la libreria decimal y funciono perfectamente.

Código Python:
Ver original
  1. >>> from decimal import Decimal
  2. >>> Decimal('6.4')%Decimal('1.0')
  3. Decimal('0.4')
  4. >>> l = Decimal('6.4')%Decimal('1.0')
  5. >>> l
  6. Decimal('0.4')
  7. >>> print(l)
  8. 0.4
  9. >>>

Por otra parte revice la documentacion de Python indicada por razpeitia viendo que mostraban una funcion llamada round() con la cual hice lo siguiente, obteniendo tambien un buen resultado.

Código Python:
Ver original
  1. >>>
  2. >>> b = round((6.4%1),2)
  3. >>> b
  4. 0.4
  5. >>>

Por el momento utilizare la funcion round(), por otra parte en el documento tambien se explica la suma de 0.1 + 0.2 por lo cual seria bueno que le des una ojeada "12trunks12".

No hay duda de que Python es lo maximo, incluso tiene una esplicacion personalizada para estos casos..
__________________
**********
I can do it !!!
**********

Etiquetas: variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:09.