Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Problema al extarer datos de acces
#1
Hola , tengo una conexion puente hecha en python entre access y mysql , pues bien me ha surgido un problema , cuando leo un numero como por ejemplo 0.10000000149011612 la lectura y extraccion la hace bien , pero a la hora de insertar el dato en mysql pone 0.10000000149 , supongo que es por el tamaño maximo del tipo de datos , pero no se como hacer que a sql le inserte el numero largo , cuando muestro el contenido del campo en concreto de access sale todo el numero , pero si hago un print del dato en concreto print midato[0][94] me pone el corto , alguna idea de como solucionarlo ?

[(0.10000000149011612, )] dato que viene del SELECT Auxiliar1 FROM MAQUINAS WHERE IdMaquina=1

0.10000000149 dato que imprime desde midato[0][0]
Responder
#2
Hola. Este es un problema que no se limita a Python, sobre cómo se manejan los números de coma flotante. En Python podés usar el módulo decimal para obtener representaciones un tanto más exactas que con el tipo incorporado float.

  1. >>> from decimal import Decimal
  2. >>> a = Decimal(0.10000000149011612)
  3. >>> print(a)
  4. 0.100000001490116119384765625


Te recomiendo que leas algunos artículos del tema, como éste (en inglés), que explica cuál es la razón por la que:

  1. >>> 0.1 + 0.2
  2. 0.30000000000000004


y otros detalles interesantes.

Saludos
Responder
#3
Gracias , me ha servido de mucho , pero ahora me surge otro caso , leo 32.3491 , pero necesito 32.35 , como lo hago ?
es decir , necesito pasar de float a double con redondeo
Responder
#4
En ese caso, si d = Decimal("32.3491") entonces:

  1. >>> from decimal import Decimal, ROUND_UP
  2. >>> d.quantize(Decimal(".01"), ROUND_UP)
  3. Decimal('32.35')


(De forma similar puedes usar ROUND_DOWN).

Saludos
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)