Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Campos Float en Firebird (https://www.clubdelphi.com/foros/showthread.php?t=7280)

Kira 10-02-2004 18:18:27

Campos Float en Firebird
 
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.


La franja horaria es GMT +2. Ahora son las 03:02:18.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi