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 Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-04-2005
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Poder: 21
TJose Va por buen camino
Question Error mio o bug de Firebird?

Hola Foro

Utilizo FB 1.5.2 en este caso en Windows 2000
Esto que sucede es muy extraño, dado que en otras bases tengo operaciones parecidas y se comportan como corresponde. Paso a detallar:

en un procedimiento
...
declare variable vX numeric(9,2);
...
vX = 1 - 50/100;
...

el vX deberia tomar como valor 0.5, sin embargo siempre guarda 1.
Probe con parentesis, 1 - (50/100), cambie de numeric(9,2) a numeric(9,4) y es lo mismo.

Lo extraño, como mencione arriba, es que en otros procedimientos y funciones mas complejas siempre se comporta correcatamente FB.

Saludos
TJose

Última edición por TJose fecha: 18-04-2005 a las 14:36:07.
Responder Con Cita
  #2  
Antiguo 18-04-2005
johncook johncook is offline
Miembro
 
Registrado: oct 2004
Posts: 65
Poder: 20
johncook Va por buen camino
Hola:
Estuve probando lo mismo en sql server y tengo el mismo problema.
Esto es lo que encontré en la ayuda:

Si un dividendo de tipo entero se divide por un divisor de tipo entero, el resultado es un entero en el que se trunca la parte fraccionaria del resultado, si hubiera.

Creo que la solución por el momento es que hagas lo siguiente : vx=50*0.01
Si alguien conoce una mejor manera de realizarlo (utilizando operador de división o alguna palabra reservada), por favor postee asi nos sacamos la duda.
Gracias.
Responder Con Cita
  #3  
Antiguo 18-04-2005
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Poder: 21
TJose Va por buen camino
Gracias johncook

Como bien dices, cambiando la ecuacion se soluciona, pero que peligroso puede ser confiarse en que la ecucion esta bien planteada y no controlar los resultados.

Saludos
TJose
Responder Con Cita
  #4  
Antiguo 18-04-2005
Avatar de Rufus
Rufus Rufus is offline
Miembro
 
Registrado: may 2004
Ubicación: Canarias
Posts: 193
Poder: 20
Rufus Va por buen camino
jhoncook, tienes razon. En isql, ejecutando esto:
Código SQL [-]
select 50/100 from rdb$database;
el resultado es 0. Al ser ambos operandos integer, el resultado tambien será integer.

Ahora bien, si introducimos:
Código SQL [-]
select 50.00/100 from rdb$database;
select (50 + 0.00) /100 from rdb$database;
select (50 * 1.00) /100 from rdb$database;
sí nos devuelve 0.50, el resultado correcto, al ser uno de los operandos con dos decimales el resultado tambien nos lo devuelve con dos decimales.

Un saludo
__________________
Milo
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 07:14:30.


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