Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Tipo dato decimal(x,x) eb mssql 2005 y currency en delphi 7 (https://www.clubdelphi.com/foros/showthread.php?t=82522)

richy08 14-03-2013 18:12:20

Tipo dato decimal(x,x) eb mssql 2005 y currency en delphi 7
 
Buenos dias compañeros, tengo una duda les platico, tengo una tabla con estos campo declarados en mssql 2005,

Código SQL [-]
tmes decimal(12,2),
cpp decimal(4,2)

los cuales uso en delphi para hacer una multiplicacion mediante un query, al no existir en delphi el campo decimal he declarado la variable
interesgenerado como currency
Código Delphi [-]
var 
  interesgenerado:currency;
.
.
.
  interesgenerado:=(mesesinteres*Qry_cuotas.FieldByName('tmesope').AsCurrency*Qry_cuotas.FieldByName('  cpp').value);

pero al ser declarado interesgenerado como currency este trae 4 decimales y me a estado ocacionando problemas en los cierres de mes, ya que constantemente presenta el resultado errores de decimas.


mi pregunta es como puedo hacer para que un campo currency , se comporte como un campo decimal de mssql, necesito aplicar algun tipo de redondeo??, cual es la forma en la que redondea el campo decimal de mssql

mil gracias por su tiempo

newtron 14-03-2013 19:10:27

Hola.

Hasta lo que yo sé las variables de tipo currency tienen 4 decimales así que si quieres menos deberás pasarlos por alguna función que te los redondee a los decimales que quieras.

Saludos

Al González 14-03-2013 19:13:21

Cita:

Empezado por richy08 (Mensaje 456798)
[...] necesito aplicar algun tipo de redondeo??

Es muy probable que sí, a veces hay que aplicar un redondeo específico para que cuadren las cuentas. ^\||/

Cita:

Empezado por richy08 (Mensaje 456798)
[...] cual es la forma en la que redondea el campo decimal de mssql

Hasta donde yo tengo entendido, todos (o casi todos) los motores redondean de la misma manera: http://www.clubdelphi.com/foros/showthread.php?t=38102 (perdona el estilo "payaso" de algunos de esos párrafos, han pasado algunos años :o).

Dado que usas Delphi 7, me permito comentarte que en la unidad GHFRTL de GH Freebrary encontrarás una variable llamada GHMidpointRounding para establecer uno de los cinco posibles tipos de redondeo, y la función ghRound que redondea un valor numérico a la cantidad de decimales que le indiques (bajo el tipo de redondeo escogido).

richy08 14-03-2013 19:36:40

Mil gracias a los dos por sus comentarios buscando por la red, encontre esta funcion que redondea como lo hace el excel, la verdad me callo de 10, era justo lo que necesitaba, se las dejo para si alguien algun dia tiene el mismo problema

Código Delphi [-]
function RoundTo2dp(Value: Currency): Currency;
begin
  Result := Trunc(Value*100+IfThen(Value>0, 0.5, -0.5))/100;
end;

ya le hice pruebas y al parecer funciona muy bien, ustedes que opinan :D

Al González 14-03-2013 20:02:03

Cita:

Empezado por richy08 (Mensaje 456819)
[...] buscando por la red, encontre esta funcion [...]
Código Delphi [-]
function RoundTo2dp(Value: Currency): Currency;
begin
  Result := Trunc(Value*100+IfThen(Value>0, 0.5, -0.5))/100;
end;

ya le hice pruebas y al parecer funciona muy bien, ustedes que opinan :D

Que va acorde con el tipo de redondeo que realizan los motores de bases de datos (al infinito). :) ^\||/


La franja horaria es GMT +2. Ahora son las 11:04:20.

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