PDA

Ver la Versión Completa : Campos Float en Firebird


Kira
10-02-2004, 18:18:27
Alguien sabría decirme que ocurre con el tipo Float en interbase y Firebird?
Tengo una tabla con un campo float, e intento guardar el número: 354068.08 y la base de datos me almacena 354068.09.
Si hago lo mismo con un campo Double precision, me almacena el valor correcto.

Julià T.
10-02-2004, 21:23:38
puede ser un problema de la precisión del float ("single precision" 4 bytes) en frente al double ("double precision" 8 bytes).

Cuando guardamos números reales hemos de tener en cuenta que dependiendo del valor del número, no existe una representación exacta de dicho número en formato digital (por ejemplo 3,03 no tiene representación exacta) por lo que a mayor precisión, más se va a parecer al número real.

Kira
11-02-2004, 10:48:58
Con lo cual entiendo que para calculos precisos siempre es mejor utilizar campos definidos como "double"

__cadetill
11-02-2004, 11:22:52
Si quieres una buena precisión, sí

guillotmarc
11-02-2004, 11:49:38
Hola.

Yo prefiero utilizar campos numeric, así puedo especificar el nº de decimales con los que voy a trabajar. Por ejemplo, si quiero guardar hasta 4 decimales de precisión, utilizaré un campo numeric(18, 4)

Saludos.

Kira
11-02-2004, 13:00:40
Ya probé eso, la cuestión es que si buscas documentación al respecto, te cuentan que interbase internamente almacena los numericos de forma distinta.

Si definimos una columna como numeric(3,2), por ejemplo, sus valores se almacenan multiplicados por 100, para obtener un número entero. La escala se guarda en una tabla del sistema, y se utiliza para restaurar el número original durante la evaluación de expresiones por InterBase. Si, por el contrario, la precisión es superior a 9, el número se almacena directamente con el formato de double precision

En resumen, creo que el resultado es el mismo ya que InterBase siempre utilizará uno de sus tipos binarios nativos para representarlas.

Julià T.
12-02-2004, 01:37:53
Con definiciones como numeric(3,2) no hay perdida de precisión, ya que los enteros no dan problema de precisión a no ser que estos sean muy muy grandes.

Otra cosa es como se trabaja luego con estos campos, ya que en interbase-firebird (al menos con dbxpress) los reconoce como TBDCField o TFmtBDCField

Kira
12-02-2004, 17:06:45
Gracias chicos,

en mi caso necesito decimales y con precisión en ocasiones de hasta 6 digitos decimales. Y cuando esos decimales afectan directamente a dinero, a los contables no les gusta (jejeje).


Al final cambié mi base de datos, puse los importes a Double Precisión y por ahora funciona como la seda.


Gracias por vuestra ayuda.