Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Funcion Frac(x) (https://www.clubdelphi.com/foros/showthread.php?t=52240)

juanjo_m_m 15-01-2008 13:47:23

Funcion Frac(x)
 
queria saber si hay otra manera de sacar la parte decimal de un numero real parecida a la funcion FRAC(X), tengo un problema con esta.

me devuelve lo siguiente:

en el primer calculo.....

X:= 1425.412
Y:= 25

entero:= trunc( X / Y);
fraccion:= frac( X / Y)* Y;

saca lo siguiente X:= 57 Y:= 0.412


//*/*/*/*/*/

en el segundo calculo.....

X:= 1472.145
Y:= 25

entero:= trunc( X / Y);
fraccion:= frac( X / Y)* Y;

saca lo siguiente X:= 58 Y:= 0.999

ALGUIEN SABE PORQUE O COMO SOLUCIONARLO....

saca lo siguiente X:= 57 Y:= 0.412

juanjo_m_m 15-01-2008 13:55:20

perdon añadiendo a lo anterior en la segunda vuelta

saca lo siguiente X:= 58 Y:= 9.999

duilioisola 15-01-2008 15:43:11

1425.412 / 25 = 57.01648 --> trunc = 57
frac(1425.412 / 25) = 0.01648 * 25 = 0.412

1472.145 / 25 = 58.8858 --> trunc = 58
frac(1472.145 / 25) = 0.8858 * 25 = 22.145

Creo que el problema es que no estás mostrando bien el resultado.

duilioisola 15-01-2008 15:52:20

Aparte de esto, qué es lo que quieres hacer con estas funciones?
Porqué multiplicas la parte decimal por Y?
Si solo quieres los decimales, no necesitas multiplicar por nada.

juanjo_m_m 15-01-2008 16:52:56

un ejemplo tienes un producto que tiene peso total t peso por bulto
digamos:

tienes 10984 kilos de arroz
y cada bulto pesa 50 Kilos

para hacer la conversion y saber cuantos bultos y cuanto de fraccion tienes se hace lo siguiente...

10984/50= 219.68

tengo 219 bultos de 50 kilos cada uno y...

0.68*50=34

34 kilos en fraccion que seria equivalente a 219 bultos + 34 kilos = 10984 kilos de arroz

pero el problema que tengo es que en el primer calculo me da correcto como debe de ser pero si trato de hacer el mismo calculo con otros datos en la fraccion me saca 9.9999 sea cual sea el valor no se donde puede estar el error, el procedimiento de las formulas es el siguiente..

X:= 1425.412
Y:= 25

entero:= trunc( X / Y);
fraccion:= frac( X / Y)* Y;

saca lo siguiente X:= 57 Y:= 0.412


//*/*/*/*/*/

en el segundo calculo.....

X:= 1472.145
Y:= 25

entero:= trunc( X / Y);
fraccion:= frac( X / Y)* Y;

saca lo siguiente X:= 58 Y:= 9.999


POR ESO NO SE DONDE PUEDE ESTAR EL ERROR!!!!

luisgutierrezb 15-01-2008 17:00:49

y si usas un tipo de datos diferente? por ejemplo el currency?? ya me ha sacado de varios problemas este tipo de datos que ya mejor lo pongo por default cuando manejo cualquier decimal

Mick 15-01-2008 17:20:32

Antes de utilizar numeros en punto flotante en nuestros calculos es importante entender como funcionan, hay muchos tutoriales por ejemplo:

http://support.microsoft.com/kb/42980/es

http://www.cs.utah.edu/~zachary/isp/applets/FP/FP.html

Saludos

Robert01 15-01-2008 17:52:53

No heprobado los cálculos para ver si dan los valores correctos, probá así:

Código Delphi [-]
  public
    { Public declarations }
   x,y,fraccion,entero : single;
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}
procedure cal(var x : single; var y : single; var fraccion : single;var entero:single);
begin
entero:=trunc(x/y);
fraccion := y*frac(x/y);
end;

procedure TForm1.Button1Click(Sender: TObject);

begin

x:=strToFloat(Edit1.Text);
y:=strToFloat(Edit2.Text);

cal(x,y,fraccion,entero);

Edit3.Text:=floattoStr(entero);
Edit4.Text:=floattoStr(fraccion);

end;


Creo que anda bien

Saludos


La franja horaria es GMT +2. Ahora son las 09:30:18.

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