Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas con Redondeos (https://www.clubdelphi.com/foros/showthread.php?t=27184)

AGAG4 14-11-2005 19:01:49

Problemas con Redondeos
 
Ya he investigado en los foros, hay mucha información sobre este tema, pero no he encontrado la manera de solucionar el problema que tiene RoundTo, SimpleRoundTo, de Redondear decimales con valor 5, la única función de delphi que he probado que se acerca es la FloatToStrF, pero esta tiene que recibir String's en vez de Valores Reales ó Flotantes, y se preguntarán porque no convierto de String a Flotante, yo les respaldo ya lo hice y por esta conversión falla el redondeo de la función FloatToStrF, pongo los ejemplos de esta misma:
Código Delphi [-]
edit2.text:=FloatToStrF(StrToFloat('6.225'), ffFixed, 18, 2);
//Valor que despliega es 6.223 que es el correcto
Pero si hago esto....
 
var
Valor:double;
begin
Valor:=6.225;
edit2.text:=FloatToStrF(FloatToStr(Valor), ffFixed, 18, 2);
//Me da el Resultado 6.22
{Me Obliga a darle un String en vez de darle un valor Real}

Agradezco cualquier sugerencia.

AGAG4 14-11-2005 20:13:09

:)
 
Tuve que hacer una Mexicanada como aqui en México se dice,
Código Delphi [-]
//Antes
edit2.text:=FloatToStrF(FloatToStr(Valor), ffFixed, 18, 2);
//Ahora
var
  ValorReal:Double;
ValorReal:=FloatToStrF(StrToFloat(FloatToStr(ValorReal)), ffFixed, 18, 2);
Como ven tengo que recibir el valor de tipo Real y convertirlo a String y devolverlo a Flotante y apenas asi me redondea a 6.23 el valor 6.225

Espero ha alguien le sirva.

[Gunman] 14-11-2005 20:26:22

No entiendo muy bien el problema que planteas, pero por ejemplo, si quieres redondear un numero de coma flotante a su valor más próximo con dos cifras decimales entonces:
Añades la libreria Math a tu programa...
Código Delphi [-]
  uses Math;
...y te creas esta función (por ejemplo)
Código Delphi [-]
 function RedondeoReal(Valor: Real): Real;
 begin
   SetRoundMode(rmNearest);
   Result := RoundTo(Valor, -2);  //RoundTo(ValorARedondear,Cifras decimales (-2) o 0 a añadir (2)
 end;

AGAG4 14-11-2005 21:51:39

ok
 
Creo que no has probado Bien el RoundTO, enviale un valor entero cualquiera, con terminación en decimal 5 y no te redondea correctamente hacía arriba:
Te doy el ejemplo:
Código Delphi [-]
....
var
Valor:Real;
begin
....
Valor:=6.225;
edit2.text:=FloatToStr(RoundTo(valor,-2));
//El valor resultante es de 6.22 en vez de ser 6.23

Espero haberme explicado

jachguate 14-11-2005 23:38:44

Cita:

Empezado por AGAG4
edit2.text:=FloatToStr(RoundTo(valor,-2));
//El valor resultante es de 6.22 en vez de ser 6.23

El resultado de 6.22 es un valor correcto según las reglas de redondeo

Cita:

Empezado por AGAG4
Creo que no has probado Bien el RoundTO

Creo que el problema no está en la función en si, sino en el valor que vos esperas que devuelva, puesto que es un valor erroneo.

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 00:02:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi