Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-09-2004
Avatar de Triton
Triton Triton is offline
Miembro
 
Registrado: nov 2003
Ubicación: Murcia
Posts: 37
Poder: 0
Triton Va por buen camino
Unhappy Problema con Decimales de Double Precision

Hola a TODOS, foreros/as

Tengo un problema y no se a que puede ser debido.

Estoy trabajando con una base de datos en FIREBIRD 1.5.1 y cuando
concateno un campo double precision con otro por ejemplo (187.00||Eur)
el resultado es el siguiente 187.00000000000 Eur. Solo me pasa cuando el
campo Double Precision acaba en x,00. Tal vez sepan como arreglar esto.

Gracias desde ya.
__________________
La ignorancia es la felicidad
Responder Con Cita
  #2  
Antiguo 03-09-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
Hola.

Si lo que quieres es que solo salgan dos decimales, convierte antes de double precision a un numerico con 2 decimales.

cast(187.0 as numeric(15,2)) || 'Eur'

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 07-09-2004
eyscom eyscom is offline
Miembro
 
Registrado: may 2003
Posts: 15
Poder: 0
eyscom Va por buen camino
el mismo problema

yo tengo el mismo problema y al probar el cast me da el erro de identificador
indefinido si agrego la unidad Variants, no puede compilar la aplicacion
Responder Con Cita
  #4  
Antiguo 07-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
La instrucción publicada por marcos es válida para el dialecto SQL de firebird/interbase, y no para delphi.

Si queres obtener 2 decimales en delphi, habrá que ver si es de forma visual en algún componente, o sobre que tipo de dato.

Saludos.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #5  
Antiguo 08-09-2004
eyscom eyscom is offline
Miembro
 
Registrado: may 2003
Posts: 15
Poder: 0
eyscom Va por buen camino
lo que nesecito es que el importe de una factura al guardarlo en la tabla, uso ib7 y el campo 'importe' es double precision, tenga solo dos decimales, en la pantalla de la aplicacion se ven dos decimales, pero al guardar el dato lo almacena con 8 o 9 decimales, Por ej. un importe 8.80 es guardado 8.800000008934. Como debo hacer para que almacene solo dos decimales
Responder Con Cita
  #6  
Antiguo 08-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 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
  #7  
Antiguo 08-09-2004
teletranx teletranx is offline
Miembro
 
Registrado: feb 2004
Ubicación: Chile
Posts: 112
Poder: 21
teletranx Va por buen camino
Lightbulb

Saludos

Compartiendo el problema de todos.

Ya hace algún tiempo tenía ese problema, cuando definía


seguro numeric(5,2)
retiro numeric(5,2)
otro numeric(5,2)
Son numeros leidos de una tabla
seguro 2.89
retiro 10.0
otro 2.89

en firebird

seguro 2.8888899999999 ó 2.88888888899999 ó 2.88999999 o algo así
retiro 10.00
otro 2.89

después cambié
todos a numeric(15,2)
en firebird

seguro 2.89
retiro 10.00
otro 2.89

y no he tenido más problema

Juan Carlos

Última edición por teletranx fecha: 10-09-2004 a las 23:14:22.
Responder Con Cita
  #8  
Antiguo 08-09-2004
eyscom eyscom is offline
Miembro
 
Registrado: may 2003
Posts: 15
Poder: 0
eyscom Va por buen camino
Gracias a todos con el tipo de dato numeric(15,2) solucione mi problema
de nuevo muchas gracias a todos
Responder Con Cita
  #9  
Antiguo 08-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

Cita:
Empezado por teletranx
seguro 2.89
...
en firebird

seguro 2.8999999999999
Esto no lo creo posible. Habrás querido decir:

seguro 2.889999999999999999

o

seguro 2.890000000000000001234

Dado que el número es lo mas aproximado posible a su valor real.

Saludos.

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


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 18:18:45.


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