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 26-09-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Fraccionarios en FireBird con Dialecto 3

Hola amigos, acudo a ustedes por el siguiente motivo...

Tengo una base de datos nueva y creada en FireBird 1.5 con Dialecto 3, en ella hice una tabla que la llame "Prueba", con un unico campo llamado "Valor" de tipo Double precision, luego hice el siguiente procedimiento almacenado llamado "SP_Prueba":

Código SQL [-]
CREATE PROCEDURE SP_Prueba
as
declare variable conteo integer;
begin
  conteo = 0;
  while (:conteo <= 1000) do
  begin
    insert into test (conteo, valor) values(:conteo, 33.33);
    conteo = :conteo+1;
  end 
end

Que como pueden ver, dicho procedimiento almacenado solo guarda 1000 veces el valor 33.33 en la tabla "Prueba", luego voy a ver la tabla y efectivamente dicho valor en los mil campos es 33.33, es toda una maravilla (Ya que cuando lo hacia en Dialecto 1, no era exactamente ese el valor que me dejaba).

Luego de dicha prueba hice otra... he cambiado el procedimiento almacenado por el siguiente:

Código SQL [-]
CREATE PROCEDURE SP_Prueba
as
declare variable conteo integer;
begin
  conteo = 0;
  while (:conteo <= 1000) do
  begin
    insert into test (conteo, valor) values(:conteo, 100/3);
    conteo = :conteo+1;
  end 
end

Pero al ver la tabla, me encuentro con que el valor en esos 1000 registros es 33, cuando deberia ser 33.333333333333333. Luego hice otra prueba, 100/33 y el resultado fue 3, cuando deberia tener fraccionarios , si coloco el tipo de campo como Numeric(15,2), sucede lo mismo , luego hice 100/3.3 y allí el resultado fue 30.3 que en este caso si era el correcto, lo que me lleva a pensar que si no coloco en el divisor un numero decimal, el resultado devuelto no tendra decimales, asi el resultado verdadero lleve decimales.


¿Alguien sabe a que se debe esta situación o tiene alguna sugerencia al respecto?, por vuestro tiempo, amabilidad y paciencia prestados, muchisimas gracias .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #2  
Antiguo 26-09-2007
pvizcay pvizcay is offline
Miembro
 
Registrado: jun 2006
Posts: 147
Poder: 18
pvizcay Va por buen camino
esta correcto el comportamiento y es lo que dice el standard sql:

cuando divides dos números, la escala resultante (parte decimal) es la suma de las dos escalas de los operandos.. aca son dos enteros, escala = 0, por lo tanto te lo redondea...

prueba con 100 / 3.00

salu2
Responder Con Cita
  #3  
Antiguo 27-09-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por pvizcay Ver Mensaje
esta correcto el comportamiento y es lo que dice el standard sql:

cuando divides dos números, la escala resultante (parte decimal) es la suma de las dos escalas de los operandos.. aca son dos enteros, escala = 0, por lo tanto te lo redondea...

prueba con 100 / 3.00

salu2
Ahhh, ¿Si?, Caramba¡¡¡, muchas gracias pvizcay por tu comentario, Ahora me surge otra duda, ¿Hay alguna manera de que 100/3 me de 33.33?, Ya he probado cambiando los tipo de campo a Double precision y a Numeric(15,2), pero con ambos obntengo el mismo resultado.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #4  
Antiguo 27-09-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Hola amigo jhonny

intenta con esto,

Código SQL [-]
CREATE PROCEDURE SP_PRUEBA 
as
declare variable conteo integer;
declare variable resultado double precision;
begin
  conteo = 0;
  while (:conteo <= 1000) do
  begin
    resultado = cast(100 as double precision)/3;
    insert into test (conteo, valor) values(:conteo, :resultado);
    conteo = :conteo+1;
  end 
end

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #5  
Antiguo 27-09-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que si pones los decimales ya te funcionará perfecto y no te hará falta poner el cast:
Código:
resultado = 100.00 / 3.00;
Responder Con Cita
  #6  
Antiguo 27-09-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Caramba¡¡¡, muchas gracias amigos, ayer me fui a casa un poco frustrado con el asunto, aunque debo decir que la respuesta de pvizcay ya me habia alentado, me sentia con los brazos cruzados al no dar con la solución .

Hoy 7:50 de la mañana por estos lados, ustedes dos han terminado de arreglarme el dia , muchisimas gracias a los tres, me han quitado la venda que tenia en mis ojos .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #7  
Antiguo 27-09-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Creo que si pones los decimales ya te funcionará perfecto y no te hará falta poner el cast:
Código:
resultado = 100.00 / 3.00;
Esa sería la más fácil amigo Casimiro, la cuestión es que el amigo jhonny tenía la duda si era posible que no se usara de esa manera y usar enteros no será que quieres pasar datos enteros a ese procedimiento amigo jhonny

Cita:
Empezado por jhonny Ver Mensaje
Caramba¡¡¡, muchas gracias amigos, ayer me fui a casa un poco frustrado con el asunto, aunque debo decir que la respuesta de pvizcay ya me habia alentado, me sentia con los brazos cruzados al no dar con la solución .

Hoy 7:50 de la mañana por estos lados, ustedes dos han terminado de arreglarme el dia , muchisimas gracias a los tres, me han quitado la venda que tenia en mis ojos .
Pues que bien que te sirvió, me siento feliz de haberte podido ayudar, no siempre se puede con compañeros de alto nivel como el tuyo.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #8  
Antiguo 27-09-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por egostar Ver Mensaje
Pues que bien que te sirvió, me siento feliz de haberte podido ayudar, no siempre se puede con compañeros de alto nivel como el tuyo.
Pues de nuevo gracias egostar, por tu ayuda y por tus palabras .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Dialecto 1 o 3 ?? TheWOlf Firebird e Interbase 2 13-07-2005 18:29:17
Problema con dialecto T-man Firebird e Interbase 5 18-10-2004 16:22:16
Problema en Firebird con dialecto 3 Leonidas Firebird e Interbase 1 24-07-2004 07:43:35
Configurar BDE INTERBASE/FIREBIRD DIALECTO 3 ASAPLTDA Conexión con bases de datos 4 29-03-2004 23:21:30
Dialecto 3 y BDE Pablillo Conexión con bases de datos 3 12-12-2003 17:36:28


La franja horaria es GMT +2. Ahora son las 09:58:51.


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