PDA

Ver la Versión Completa : Funcion Frac(x)


juanjo_m_m
15-01-2008, 13:47:23
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í:

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