Ver Mensaje Individual
  #6  
Antiguo 08-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Reputación: 27
jachguate Va por buen camino
La representación de un número dentro de la base de datos, es binaria. Si buscas, verás que no hay forma de representar un número con solo dos decimales en este formato. De alli, que regularmente los números "arrastran" algunos decimales (muy poco significativos) sobre el número que en realidad queremos almacenar.

Esto ocurre en todas las bases de datos, pero algunas (como oracle) ocultan esto del usuario, formateando el número, cuando usas un tipo numeric(10,2), por ejemplo, pero siempre es un efecto visual. He visto que con interbase esto no sucedia, y dado que regularmente uso double precision, no se si sigue comportandose de esta manera el nuevo interbase o firebird, o si ya "maquillan" este pequeño detalle.

Este es un "issue" de la computación en general, y cualquier programa que maneje datos numéricos (excel, por ejemplo), se enfrenta a este problema.

Muchos sistemas, en aras de ser mas exactos, lo que hacen es almacenar números que de antemano se sabe que almacenaran pocos decimales, en datos enteros (por ejemplo Int64 (bigint)). Luego, aplican la división pertinente. Es una forma de enfrentar el problema. De hecho, firebird/interbase, lo hace para números cuya precisión definida lo permite.

Te recomiendo no usar tipos de coma flotante, si no queres toparte con esto. Usa mejor tipos numeric(x,y), donde dejas esto al motor, y si la versión actual de tu base de datos no lo maquilla... seguro en el futuro lo hará.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita