Foros Club Delphi

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

Carlos Arevalo 30-07-2008 16:19:58

Calculo con decimales
 
Que tal Amigos

El problema es el sig:

un cliente tiene hecho en excel un calculo para el iva de la siguiente manera.

Divide el monto total ya con el iva incluido 185 entre 1,09 = 169,72 y luego calcula el iva multiplicando por 9% y el resultado que da es 15,27522936 que al darle el formato para 2 decimales queda en 15,28.

El objetivo de esta funcion es intruducir el monto ya con iva y que la funcion separe la base del iva y de esta manera trabajar con montos redondos sin decimales.

Cuando yo hago este mismo calculo en Delphi el resultado del iva es 15,2748 al ponerle dos decimales me queda en 15,27.

Como puedo hacer para que el calculo me de como en la hoja de excel 15,2752 y al ponerle dos decimales de 15,28 cual es el error?

Código Delphi [-]
base.text:=formatfloat('#,##0.00',strtofloat(monto.Text)/((100+strtofloat(ivax.Text))/100));
ivamonto.Text:= formatfloat('#,##0.00',(strtofloat(base.text)* strtofloat(ivax.Text)) / 100);

Luis M. 30-07-2008 16:47:46

Hola.

El calculo sería más o menos así:
Suponiendo:
Monto = 120€
Iva := 16 %

Base = 120 / 1.16 = 103.45 €

No se si era esto lo que buscabas.
Un saludo.

coso 30-07-2008 17:09:21

Hola, a mi me ocurrio algo parecido con los descuentos: segun como lo calculaba, redondeaba para arriba o para abajo. El problema esta que extraes el dato desde el edit. Deberas guardarlo todo en variables double, haciendo los calculos paralelamente hasta el momento de mostrarlo. Dicho de otra manera, no deberias usar ivax.text, sino calcular este en un double, y solo usar cadenas cuando se quiera mostrar o modificar su valor directamente (claro esta, con la divison de arriba, total_con_iva / 1.09 = base)

Carlos Arevalo 30-07-2008 18:12:27

Estas en lo correcto hice la prueba de esta manera y funciona bien.

Código Delphi [-]

var xbase,xmonto,xivax,xivamonto: double;
begin

xmonto:=0;
xivax:=0;

xmonto:=strtofloat(monto.Text);
xivax:=strtofloat(ivax.Text);

xbase:= xmonto/((100+xivax)/100);
xivamonto:= (xbase*xivax) / 100;

base.text:=formatfloat('#,##0.00',xbase);
ivamonto.Text:= formatfloat('#,##0.00',xivamonto);


Muchas gracias por la ayuda.


La franja horaria es GMT +2. Ahora son las 12:43:50.

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