FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
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/ |
#3
|
||||
|
||||
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/ |
#4
|
||||
|
||||
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; |
|
|
|