Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con obtencion de decimales (https://www.clubdelphi.com/foros/showthread.php?t=33796)

onlytk 17-07-2006 16:04:34

Problema con obtencion de decimales
 
Tengo un problema con la obtencion de decimales de un monto.
Código:

edtRazonSocial.Text := dmData.dbfProvee.FieldValues['Nom_pro'];
montoTotal :=  dmData.dbfCompras.FieldByName('Tot_odc').AsFloat;
partEntera := Trunc(montoTotal);                         

partDecimal := Trunc(100*Frac(montoTotal));

edtMonto.Text := Format('%n',[montoTotal]);
atxtMonto.Numero := partEntera;
edtMontoLetras.Text := atxtMonto.AsString + 'CON ' + Format('%.2d/100',[partDecimal]);

Estoy utilizando el componente ATexto, y quiero que me muestre en letras una cantidad, y que la parte decimal la exprese asi: 90/100 Dolares, pero me falla con algunos decimales puesto que me muestra 89/100 supongo que es el redondeo, alguien me puede ayudar por favor??.

Salu2.

luisgutierrezb 17-07-2006 16:55:35

en lugar de AsFloat, procura usar AsCurrency igual para todas las variables que manejes decimales usa tipo Currency

bismarck_sierra 17-07-2006 17:03:07

Que tal

Yo lo hago de esta manera, espero te sirva

Código Delphi [-]

partDecimal := Trunc((montoTotal - Int(montoTotal)) * 100);

Saludos
Bismarck

Lepe 17-07-2006 22:22:42

Creo que la función Frac hace exactamente eso

bismarck_sierra 18-07-2006 00:49:55

Que tal Lepe

Es cierto que la función Frac quita la parte entera, pero en este caso sólo interesan los 2 primeros decimales sin redondear.

Saludos
Bismarck

onlytk 18-07-2006 02:48:00

Gracias luisgutierrezb
 
Gracias luisgutierrezb y bismarck_sierra lo consegui cambiando:
Código:

var
    montoTotal: Double;
    partEntera: Integer;
    partDecimal: Integer;

por:

Código:

var
    montoTotal: Currency;
    partEntera: Integer;
    partDecimal: Integer;

y tambien obteniendo los decimales de la forma en que dijo bismarck_sierra:

Código:

partDecimal := Trunc((montoTotal - Int(montoTotal)) * 100);
Pero porque ocurre esto???, tanta es la diferencia entre los tipos Double y Currency??

Salu2 y gracias.


La franja horaria es GMT +2. Ahora son las 06:10:42.

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