Neeruu
12-04-2016, 15:35:51
Hola a todos, tengo la siguiente función para redondear:
Function Redondear (Numero : Double; PrecisionDec : byte) : double;
function Potencia(Base : Double; Exponente : byte) : Double;
begin
Result := Exp(Exponente * ln(Base));
end;
var Nro:Single;
iRound:Integer;
begin
Nro := Numero * Potencia(10, PrecisionDec);
if (Frac(Nro))>=0.5 then
iRound := 1
else
if (Frac(Nro))<=-0.5 then
iRound := -1
else iRound := 0;
Result := (Trunc(Nro)+iRound) / Potencia(10, PrecisionDec);
end;
Pero cuando redondeo este valor :247999.57 a 2 decimales el valor de la variable Nro es de 24799958, cuando debería ser 24799957...
O sea el error esta en esta linea:
Nro := Numero * Potencia(10, PrecisionDec);
Alguien sabe porque se puede dar esto?
Saludos...
Function Redondear (Numero : Double; PrecisionDec : byte) : double;
function Potencia(Base : Double; Exponente : byte) : Double;
begin
Result := Exp(Exponente * ln(Base));
end;
var Nro:Single;
iRound:Integer;
begin
Nro := Numero * Potencia(10, PrecisionDec);
if (Frac(Nro))>=0.5 then
iRound := 1
else
if (Frac(Nro))<=-0.5 then
iRound := -1
else iRound := 0;
Result := (Trunc(Nro)+iRound) / Potencia(10, PrecisionDec);
end;
Pero cuando redondeo este valor :247999.57 a 2 decimales el valor de la variable Nro es de 24799958, cuando debería ser 24799957...
O sea el error esta en esta linea:
Nro := Numero * Potencia(10, PrecisionDec);
Alguien sabe porque se puede dar esto?
Saludos...