Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   como truncar flotantes? (https://www.clubdelphi.com/foros/showthread.php?t=16805)

Dantael 13-12-2004 07:22:25

como truncar flotantes?
 
Hola foro, buehh otra vez yo y mis problemas, tengo dos variables de tipo double pero la empresa para la que estoy haciendo la aplicación solo maneja 3 digitos después del punto o sea 9.123 y no más, si yo hago una resta de un volumen por decir 110-100.001 me manda 9.99899999999999 con algunos otros números si lo trunca 200-100.001 me manda 99.999, por qué hace esto?, existe alguna forma de truncar los flotantes? o que opción me recomiendan?, les agradezco de antemano cualquier ayuda que tengan al respecto.
Saludos
Yo. :D

Er_Manué 13-12-2004 09:22:17

Si lo que quieres es redondear con x dígitos decimales de precisión puedes usar la función RoundTo(numero,precision) debes incluir la librería Math en el uses.

Código:

miVar := 1.3256;
// Redondeamos con 3 dígitos de precisión
miVar := RoundTo(miVar, -3);

// Ahora tendríamos en miVar el valor 1.326

salu2

Dantael 13-12-2004 20:56:42

gracias pero
 
Hola Muchas gracias por tu ayuda estoy utilizando delphi 5 y puse en el uses Math, luego puse la función RoundTo como me lo indicaste pero me manda este error undeclared idintifier 'RoundTo' ya busque la función en la ayuda de delphi pero no aparece, Gracias nuevamente

mi declaración es así
saldoact:=RoundTo(saldoact,-3);
Saludos :D

marcoszorrilla 13-12-2004 21:43:17

Otra solución a falta de la función en D5 es multiplicar el número por 1000, extraer la parte entera y volver a dividirlo por 1000.

Un Saludo.

llonigualker 14-12-2004 10:08:56

Esta funcion Redondea Numeros reales segun la cantidad de decimales y el tipo de redondeo (Truncado o Simetrico) que le pasemos por parametro.
Devuelve un String porque yo la uso para visualizar los numero en un String pero se puede convertir el String a Float si es necesario.



Function Redondeos(Var Numero: real; Cant: Integer; TipoRedondeo: Char): String;
var
Formato: String;
j: Integer;
Begin
// 'S' o 's' significa Redondeo Simétrico, de lo contrario es Truncado.
if (TipoRedondeo = 's') or (TipoRedondeo = 'S') then
Begin
if Cant = 0 then
Formato := '0'
else
Formato := '0.';
for j:=1 to Cant do
begin
Formato := Formato + '0';
end;
Result := FormatFloat(Formato,Numero);
End
Else
Begin
Result := Copy(FloattoStr(Numero),1,Pos(',',FloattoStr(Numero))-1) + Copy(FloattoStr(Numero),Pos(',',FloattoStr(Numero)),Cant+1);
End;
End;

Saludos.


La franja horaria es GMT +2. Ahora son las 13:06:44.

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