Ver Mensaje Individual
  #6  
Antiguo 04-10-2007
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Reputación: 18
rolandoj Va por buen camino
Smile Caso de Precisión

Cita:
Empezado por Lepe Ver Mensaje
Hasta donde yo sé, no es conveniente usar double precision para importes monetarios en Firebird (y otras BBDD), ya que dichos valores no se guardan con el valor exacto y al rescatarlos tendrás imprecisiones.

Estos problemas sobre todo, llegan al realizar operaciones con los datos de facturas, base imponible + porcentaje iva - porcentaje de retencion = total factura.

Lo mínimo: NUMERIC(10,2) en dialecto 3, ya que se guardan internamente como un Int64 que no tiene problemas.

Saludos
Hola,

La observación es importante y amerita una explicación:

Como dije antes, la metodología de portabilidad incluye varios aspectos. Uno de ellos es el problema de la precisión de datos numéricos. En general, el código no debería quedar dependiente de la implementación que un motor de Base de Datos haga de los valores numéricos. El mayor o menor esfuerzo que se haga para lograr esto depende de las condiciones de diseño de la aplicación y la proyección en el tiempo de dicho diseño.
El consejo más básico es, por supuesto, reducir el uso de decimales a lo estrictamente necesario.

El caso más sencillo es cuando los valores máximos proyectados no exceden las capacidades de la doble precisión. La clave está en definir lo más homogeneamente los decimales requeridos y efectuar tempranamente redondeos asegurando que los bloques de datos individuales queden consistentes para que a su vez sean consistentes los acumulados calculado a partir de ahí. En otras palabras, confiar los redondeos a la lógica de la aplicación y no a las capacidades del motor.

Por ejemplo, entre los software que he desarrollado con esa metodología está una contabilidad completa, incluyendo cálculos automáticos de depreciación y ajustes por inflación, que actualmente trabaja con Interbase 6 y en 6 años no ha dado problemas de precisión.

El asunto se complica es cuando la aplicación requiere valores numéricos proyectados que exceden la capacidad de la doble precisión. Hay varias alternativas dependiendo de la complejidad; y de hecho, si es mucha. incluso podría ser necesario considerar sacrificar portabilidad.

Se puede escribir mucho más sobre esto; pero ya sería tema de otro hilo
Responder Con Cita