Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-02-2004
Kira Kira is offline
Miembro
 
Registrado: feb 2004
Posts: 27
Poder: 0
Kira Va por buen camino
Exclamation 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.
Responder Con Cita
  #2  
Antiguo 10-02-2004
Julià T. Julià T. is offline
Miembro
 
Registrado: may 2003
Ubicación: en el teclado
Posts: 314
Poder: 21
Julià T. Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 11-02-2004
Kira Kira is offline
Miembro
 
Registrado: feb 2004
Posts: 27
Poder: 0
Kira Va por buen camino
Con lo cual entiendo que para calculos precisos siempre es mejor utilizar campos definidos como "double"
Responder Con Cita
  #4  
Antiguo 11-02-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Si quieres una buena precisión, sí
Responder Con Cita
  #5  
Antiguo 11-02-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
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.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #6  
Antiguo 11-02-2004
Kira Kira is offline
Miembro
 
Registrado: feb 2004
Posts: 27
Poder: 0
Kira Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 12-02-2004
Julià T. Julià T. is offline
Miembro
 
Registrado: may 2003
Ubicación: en el teclado
Posts: 314
Poder: 21
Julià T. Va por buen camino
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
Responder Con Cita
  #8  
Antiguo 12-02-2004
Kira Kira is offline
Miembro
 
Registrado: feb 2004
Posts: 27
Poder: 0
Kira Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 04:08:29.


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
Copyright 1996-2007 Club Delphi