Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-11-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
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.

Última edición por AGAG4 fecha: 14-11-2005 a las 19:02:58. Razón: Corrección
Responder Con Cita
  #2  
Antiguo 14-11-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
:)

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
  ValorRealouble;
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.
Responder Con Cita
  #3  
Antiguo 14-11-2005
[Gunman] [Gunman] is offline
Miembro
 
Registrado: dic 2004
Ubicación: Pedreguer.
Posts: 355
Poder: 20
[Gunman] Va por buen camino
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;
__________________
l2prog.co.nr
Responder Con Cita
  #4  
Antiguo 14-11-2005
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
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

Última edición por AGAG4 fecha: 14-11-2005 a las 21:52:54. Razón: Corrección
Responder Con Cita
  #5  
Antiguo 14-11-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 19:19:16.


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
Copyright 1996-2007 Club Delphi