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 10-01-2007
Jose_T Jose_T is offline
Miembro
 
Registrado: may 2004
Posts: 15
Poder: 0
Jose_T Va por buen camino
Redondeos con Firebird 2.0

Hola a todos.

Probad a ejecutar esta sentencia en Firebird, y decidme si estoy loco, o que:


SELECT
CAST(1.5 * (20.45 ) * 100 AS INTEGER) / 100,
CAST(1.5 * (20.45 - 0) * 100 AS INTEGER) / 100
FROM una_tabla_cualquiera

El primer campo devuelve 30,68, y el segundo 30,67. ¿Hay alguna explicación lógica?
He probado a poner - 0.0 (por si fuese un problema de tipos de datos), y seguimos en las mismas. El resultado correcto del redondeo de 30.675 es 30.68, pero no se cómo llegar hasta él.

Gracias.

Responder Con Cita
  #2  
Antiguo 10-01-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
Así a simple vista, quita el "as intenger", estás forzando a quitar los decimales
Responder Con Cita
  #3  
Antiguo 10-01-2007
Jose_T Jose_T is offline
Miembro
 
Registrado: may 2004
Posts: 15
Poder: 0
Jose_T Va por buen camino
Oño, ahí está la magia del asunto. Para hacer los redondeos (sin usar rounds de udfs ni leches), pretendía aplicar esto, pero al restar (aunque sea un 0) se "escacharra" el resultado.

Prueba a ejecutarlo y te sorprenderás.

Bueno, ¿y cómo redondeáis vosotros? Help please!!!
Responder Con Cita
  #4  
Antiguo 10-01-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
Bueno, la verdad es que en la base de datos no acostumbro a redondear nada, guardo todo según lo calculado desde Delphi.
Algo asi como esta función:
Código:
function Redondeo (valor:Double; decim:integer = 0): Double;
var
  factor: Double;
begin
  factor := IntPower(10,decim);

  if valor > 0 then
    Result := (TRUNC((valor*factor)+0.5)) / factor
  else
    Result := (TRUNC((valor*factor)-0.5)) / factor;
end;
Y el resto de valores los guardo con todos sus decimales.
Responder Con Cita
  #5  
Antiguo 10-01-2007
Jose_T Jose_T is offline
Miembro
 
Registrado: may 2004
Posts: 15
Poder: 0
Jose_T Va por buen camino
Es que en mi tabla de detalle de facturas tengo un campo BaseImponible que es COMPUTED BY. Lo creé así por consistencia y... EN QUÉ HORA!!!
Responder Con Cita
  #6  
Antiguo 10-01-2007
fdelamo fdelamo is offline
Miembro
 
Registrado: oct 2005
Ubicación: Sotoca de Tajo - Guadalajara (ESP)
Posts: 86
Poder: 19
fdelamo Va por buen camino
En lugar de hacer el CAST as INTEGER haz un CAST as NUMERIC(6,2)
Responder Con Cita
  #7  
Antiguo 10-01-2007
Jose_T Jose_T is offline
Miembro
 
Registrado: may 2004
Posts: 15
Poder: 0
Jose_T Va por buen camino
Otias, en cuanto llegue a casa lo pruebo. ¡Gracias!
Responder Con Cita
  #8  
Antiguo 10-01-2007
Jose_T Jose_T is offline
Miembro
 
Registrado: may 2004
Posts: 15
Poder: 0
Jose_T Va por buen camino
Nada, el resultado es el mismo que si no hubiese redondeado.

Juer, vaya venta. ¿Ninguno hace redondeos usando campos COMPUTED BY en la propia base de datos?

Ayudaaa
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
alguien ha utilizado Firebird DDX provider? (conectarse con db en firebird!) JuanErasmo .NET 1 04-11-2006 16:17:12
problemas con float y redondeos wonder boy Firebird e Interbase 17 27-12-2005 20:59:06
Problemas con Redondeos AGAG4 Varios 4 14-11-2005 23:38:44
Firebird : Llamado para probadores de Firebird 2.0 JOSEPE Firebird e Interbase 0 12-03-2005 20:33:18
Problemas Firebird Super Server 1.5 con RFunc Firebird v 1.0 Prophoenix Firebird e Interbase 1 09-03-2004 11:40:48


La franja horaria es GMT +2. Ahora son las 22:14:44.


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