Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-01-2006
rruffino rruffino is offline
Miembro
 
Registrado: dic 2004
Ubicación: Berrotaran, Cordoba - Argentina
Posts: 215
Poder: 20
rruffino Va por buen camino
Exclamation Problemas con Decimales

Amigos, tengo un problemita mas, en mi tabla de la base de datos necesito guardar los valores con solo dos decimales. Mediante el programa calculo los valores de 10, es decir, que usando funciones de redondeo, tengo los valores que quiero, pero cuando los grabo en los correspondientes campos de la tabla, al consultarla me graba los datos en 3 decimales y esos valores discrepan. Es decir, realizo dos facturaciones de distinto tipo con los mismos productos, el sistema me muetra los resultados a la perfección (ambas facturaciones dan el mismo resultado). Cuando me conecto al interbase y chequeo las tablas, los valores son distintos y en 3 decimales. Ya he probado con muchas funciones, pero llego siempre a que me guarda en 3 decimales. He probado definiendo los campos de la tabla como Float y Double Presicion, y obtengo el mismo comportamiento siempre.
Les agradezco de antemano su ayuda.
Román
Responder Con Cita
  #2  
Antiguo 02-01-2006
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
Hay varios hilos que hablan al respecto entre ellos esta este por ejemplo: http://clubdelphi.com/foros/showthre...ight=decimales

Y muchos mas, Aqui una lista de unos tantos: http://clubdelphi.com/foros/search.php?searchid=400399

En resumen, hay que declarar los campos como Numeric(x,y) y usar la funcion RoundTo.

Espero te sirva.
__________________
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
  #3  
Antiguo 02-01-2006
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
Nota: El Delphi 5 no trae la funcion RoundTo pero es posible hacer un simple copiar y pegar de la misma desde un delphi de una version mas adelantada y funciona sin necesidad de hacer ninguna clase de "Truquito" ni nada que se le paresca (Yo lo he probado ya).
__________________
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 03-01-2006
Avatar de gmontes
gmontes gmontes is offline
Miembro
 
Registrado: jul 2004
Ubicación: Culiacán, Sinaloa, México
Posts: 668
Poder: 20
gmontes Va por buen camino
yo tengo una rutina para redondear las cantidades float a dos decimales porque tengo el mismo problema. antes de guardar datos la aplico y solucionado el problema


no recuerdo el nombre del autor, pero sigo agradeciendole esta rutina

fCostoult:=RoundN((grdMov.Floats[7,i]/grdMov.Floats[4,i]),2)

d es el numero de decimales que vas a querer

function TFCapfac.RoundN(x: Extended; d: Integer): Extended;
// RoundN(123.456, 0) = 123.00
// RoundN(123.456, 2) = 123.46
// RoundN(123456, -3) = 123000
const
t: array [0..12] of int64 = (1, 10, 100, 1000, 10000, 100000,
1000000, 10000000, 100000000, 1000000000, 10000000000,
100000000000, 1000000000000);
begin
if Abs(d) > 12 then
raise ERangeError.Create('RoundN: Value must be in -12..12');
if d = 0 then
Result := Int(x) + Int(Frac(x) * 2)
else if d > 0 then begin
x := x * t[d];
Result := (Int(x) + Int(Frac(x) * 2)) / t[d];
end else begin // d < 0
x := x / t[-d];
Result := (Int(x) + Int(Frac(x) * 2)) * t[-d];
end;
end;
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 04:47:13.


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