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 01-02-2007
mamaro mamaro is offline
Miembro
 
Registrado: mar 2004
Posts: 79
Poder: 21
mamaro Va por buen camino
Exclamation falla en división

Hola, utilizo Firebird 1.5 y tengo un problema, cuando ejecuto la consulta:

Select
...,
entrada_det.cantidad,
(entrada_det.total/entrada_det.cantidad) as precio,
entrada_det.total,
...
from
entrada_det inner ...


me da un resultado erróneo:
...=...
cantidad = 100
precio = 0,004 (!! !!)
total = 41.682

...
lo hice con un procedimiento almacenado (calculando el precio posteriormente) y funciona perfecto
... si alguien me puede tirar una pista de que puede estar pasando se los agradesco.
Responder Con Cita
  #2  
Antiguo 01-02-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
¿como que tipo de dato estan definidos tus campos?
__________________

Responder Con Cita
  #3  
Antiguo 01-02-2007
mamaro mamaro is offline
Miembro
 
Registrado: mar 2004
Posts: 79
Poder: 21
mamaro Va por buen camino
tipos de datos

cantidad es de tipo Numeric(10,3)
y total numeric(10,2)
Responder Con Cita
  #4  
Antiguo 01-02-2007
mamaro mamaro is offline
Miembro
 
Registrado: mar 2004
Posts: 79
Poder: 21
mamaro Va por buen camino
aclaración

me olvidé aclarar que mi firebird es una version 1.5 Classic sobre Red Hat 9.
Responder Con Cita
  #5  
Antiguo 01-02-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Serán otros los valores, seguro que no es fallo de la división.
Responder Con Cita
  #6  
Antiguo 02-02-2007
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Eso me pasó a mi y lo comenté aqui. Esto lo soluciono aplicando una función al valor, normalmente unas UDF´s creadas por mi que son una para redondear un valor a un numero de decimales, ambos pasados como parametro, y otra para truncar valores. No se si es una forma muy ortodoxa, pero fué la única solución que encontre y por ahora me funciona perfectamente.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #7  
Antiguo 05-02-2007
lbuelvas lbuelvas is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 377
Poder: 21
lbuelvas Va por buen camino
Hola foro,

pues me puse en la tarea de reconstruir el caso

Código SQL [-]
CREATE TABLE XXX (
    ID        INTEGER NOT NULL,
    CANTIDAD  NUMERIC(10,2) NOT NULL,
    TOTAL     NUMERIC(10,3) NOT NULL
);

ALTER TABLE XXX ADD CONSTRAINT PK_XXX PRIMARY KEY (ID);

INSERT INTO XXX (ID, CANTIDAD, TOTAL) VALUES (1, 100, 41.682);

y corri la consulta

Código SQL [-]
Select
cantidad,
(total/cantidad) as precio,
total
from xxx

y el resultado fue:

CANTIDAD PRECIO TOTAL
100 0.41682 41.682

Casimiro Notevi debe tener razon, otros son tus datos o el valor almacenado en cantidad es diferente.

Otra cosa que observe, es que una division tiene en la parte decimal del resultado la suma de los numeros de posiciones decimales de los operandos.

En tu caso deberian aparecer en la parte decimal 5 digitos.
__________________
Luis Fernando Buelvas T.
Responder Con Cita
  #8  
Antiguo 05-02-2007
mamaro mamaro is offline
Miembro
 
Registrado: mar 2004
Posts: 79
Poder: 21
mamaro Va por buen camino
voy a buscar

Voy a tratar de repetir la falla y se las envío, actualmente no la tengo a mano porque sustituí el código por uno que andubiera y listo.

aaaa.... antes de alterar el código probé en otro equipo (Windows con motor Firebird SS 2.0), y la falla no se dió (con la misma base).

Gracias de nuevo por e interés que han demostrado, les envío los datos a la brevedad.
Responder Con Cita
  #9  
Antiguo 05-02-2007
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
¿Habeis probado ejecutando la consulta con el execute statement? En mi caso solo daba problemas en las consulta dinamicas que se ejecutaban con la intrucción anterior.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #10  
Antiguo 07-02-2007
mamaro mamaro is offline
Miembro
 
Registrado: mar 2004
Posts: 79
Poder: 21
mamaro Va por buen camino
solucion

Después que me dió ese error (y me dí cuenta dónde estaba fallando) mudé la consulta a un procedimiento almacenado y quedó solucionado.
Pero atención, no hice el cálculo dentro de la consulta ..

Select ....
(total/cantidad) as precio,
...

sino que lo hice ..

For Select
total,
cantidad,
(sin el precio)
...
into ... :LTOTAL, :LCANTIDAD
do
begin
LPRECIO=:LTOTAL/:LCANTIDAD;
suspend;
end


... por supuesto que LPRECIO está dentro de los parámetros que se retornan.

Bueno saludos a todos.
Responder Con Cita
  #11  
Antiguo 07-02-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por mamaro
Después que me dió ese error (y me dí cuenta dónde estaba fallando) mudé la consulta a un procedimiento almacenado y quedó solucionado.
Pero atención, no hice el cálculo dentro de la consulta ..

Select ....
(total/cantidad) as precio,
...

sino que lo hice ..

For Select
total,
cantidad,
(sin el precio)
...
into ... :LTOTAL, :LCANTIDAD
do
begin
LPRECIO=:LTOTAL/:LCANTIDAD;
suspend;
end


... por supuesto que LPRECIO está dentro de los parámetros que se retornan.

Bueno saludos a todos.
Tampoco tiene que fallar, seguramente es que has puesto tipos integer.
Responder Con Cita
  #12  
Antiguo 12-02-2007
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

tengan cuidado cuando trbajan con numeric que se vana a encontar con unos resultados que los van a volver completamente loco. En este foro hay una refencia hacia un link de como se comporta firebird con los numericos traten de leerlas antes de trabajar con es tipo de datos.

Esto lo he dicho varias veces en el foro.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Division de un Campo en un select dmagui SQL 1 04-01-2007 18:59:05
Error el división fayala Varios 3 02-08-2005 02:58:48
division por cero kalimero Varios 7 21-12-2004 17:24:28
Division grafica de Columnas rruffino Impresión 3 20-12-2004 23:31:13
Módulo de una división en Interbase Newbie Firebird e Interbase 1 07-11-2003 00:29:02


La franja horaria es GMT +2. Ahora son las 23:45:12.


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