Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-05-2010
river_1 river_1 is offline
Miembro
 
Registrado: may 2010
Posts: 55
Poder: 15
river_1 Va por buen camino
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..
Responder Con Cita
  #2  
Antiguo 11-06-2010
osmuar_exp osmuar_exp is offline
Miembro
 
Registrado: ene 2008
Posts: 18
Poder: 0
osmuar_exp Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 11-06-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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;

Última edición por Casimiro Notevi fecha: 16-06-2010 a las 02:09:03.
Responder Con Cita
  #4  
Antiguo 16-06-2010
river_1 river_1 is offline
Miembro
 
Registrado: may 2010
Posts: 55
Poder: 15
river_1 Va por buen camino
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...
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
Problema con búsqueda en campo tipo MONEY micki MS SQL Server 3 19-07-2007 17:10:59
Redondeos extraños en Delphi con Currency y Firebird 2.0 Meinard Firebird e Interbase 6 07-03-2007 21:36:30
Redondeos con Firebird 2.0 Jose_T Firebird e Interbase 12 19-01-2007 19:57:02
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


La franja horaria es GMT +2. Ahora son las 08:08:19.


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