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
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
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.