Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problema con redondeos en campos Money (https://www.clubdelphi.com/foros/showthread.php?t=68145)

river_1 27-05-2010 10:25:14

Problema con redondeos en campos Money
 
Buenas a todos :
Fijense que tengo un problema con unos campos donde calculo el subtotal, IVA y el Total de una compra, en SQL los tengo declarados de tipo Money y me genera 4 decimales, como le puedo decir que solo necesito 2 decimales a esas campos??

Mi problema surge porque en delphi al mostrar esos campos en dbedit solo me pone 2 decimales y tengo el problema de los redondeos, un ejemplo:

En Delphi estan los valores asi:

Subtotal:$2,717.40
IVA:$298.91
Total:$3016.31

En SQL los guarda asi:

Subtotal:$2,717.4
IVA:$298.914
Total:$3016.314

Al realizar el pago de la compra en delphi como solo me despliega $3016.31 me queda un saldo de $0.0040 pero no quiero que quede ese saldo..

Como le puedo hacer para igualar los valores y no me quede ese saldo??

Gracias..

osmuar_exp 11-06-2010 22:09:48

Función de redondeo
 
Hola esta función te puede ayudar,...

Código Delphi [-]
function RoundCentavos(Const X: Double): Double;
var
r:Int64;  
X2:Int64; 
x1:double; 
begin                       
  x2:=trunc((abs(x)*1000)+0.4);
  r:=(x2 mod 10); 
  x2:=trunc(x2/10);
  if r >= 5  then
          x2:=x2+1;

  x1:=x2/100; 
  if x < 0 then
     result:=0 - x1
  else
     result:=x1;
end;

La verdad no se quien es el creador de ella, pero funciona muy bien, saludos.

Casimiro Notevi 11-06-2010 23:12:00

Para 'redondear' uso esto:

Si quires redondear a dos decimales:

resultado := redondeo(importe,2);

Código Delphi [-]
uses Math;

...
...

function Redondeo (valor: Double; decimales: integer = 0): Double;
var
  factor: Double;
begin
  factor := IntPower(10,decimales);
  //
  if valor > 0 then
    Result := (trunc((valor*factor)+0.5)) / factor
  else
    Result := (trunc((valor*factor)-0.5)) / factor;
end;

river_1 16-06-2010 01:59:34

Gracias
 
Gracias Casimiro por tu respuesta, de hecho lo solucione al cambiar las propiedades del campo en el SQL , con eso se me soluciono el problema..
De todos modos Gracias...


La franja horaria es GMT +2. Ahora son las 06:00:39.

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