Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problemas con Decimales (https://www.clubdelphi.com/foros/showthread.php?t=28786)

rruffino 02-01-2006 22:07:07

Problemas con Decimales
 
:rolleyes: 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:)

jhonny 02-01-2006 23:01:31

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.

jhonny 02-01-2006 23:04:48

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).

gmontes 03-01-2006 20:10:53

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;


La franja horaria es GMT +2. Ahora son las 01:49:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi