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 13-09-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Muy interesante funcion amigo.
Creo que deberías de mostrar un ejemplo de su uso, recuerda que no todos sabemos lo mismo y que muchos pueden tener la misma duda.
A algunos nos cuesta mas que a otros entender funciones y su comportamiento.
No esta de mas el ejemplo amigo.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #2  
Antiguo 13-09-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que también puede valer esto:

Si quires redondear a dos decimales:

resultado := redondeo(importe,2);

Código Delphi [-]
uses Math;

...
...

function Redondeo (valor: Double; decimales: integer = 0): Double;
var
  factor: Double;
begin
  factor := IntPower(10,decimales);
  //
  if valor > 0 then
    Result := (trunc((valor*factor)+0.5)) / factor
  else
    Result := (trunc((valor*factor)-0.5)) / factor;
end;
Responder Con Cita
  #3  
Antiguo 13-09-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Caral Ver Mensaje
Hola
Muy interesante funcion amigo.
Creo que deberías de mostrar un ejemplo de su uso, recuerda que no todos sabemos lo mismo y que muchos pueden tener la misma duda.
A algunos nos cuesta mas que a otros entender funciones y su comportamiento.
No esta de mas el ejemplo amigo.
Saludos
Oigo y obedezco la sugerencia...

La función es muy similar a la de Casimiro. La diferencia es que él conocia una función que yo no: IntPower...
Por lo que usé dos funciones matemáticas estandard para lograrla.
Con ellas obtenemos un número que nos sirve para ajustar la cantidad de dígitos con que queremos redondear. Se almacena
en la variable local 'm' de la función RedondeaPorExceso. Luego para redondear por exceso debemos sumar 5 en esa posición.

Por último la llamada es como cualquier función:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
const
   PI= 3.14159265358979323846;
var
  n: Double;
  i: Integer;
begin
  // Ej 1:
  Memo1.Clear;
  for i:= 1 to 10 do
    Memo1.Lines.Add(FloatToStr(RedondeaPorExceso(PI,i)));
  // Ej 2:
  n:= RedondeaPorExceso(PI,5);
  // Ej 3:
  ShowMessage(Format('%8.5f %8.3f',[n,RedondeaPorExceso(PI,3)]));
end;

Saludos.

Última edición por ecfisa fecha: 13-09-2010 a las 01:15:10.
Responder Con Cita
  #4  
Antiguo 13-09-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Veo que por hacer las cosas en el aire, cometí un error al escribir la función. Y aunque añade un dígito en la posición deseada, para que este sea 5, debería ser:
Código Delphi [-]
function RedondeaPorExceso(Numero: Double; Digitos: Integer): Double;
var
  m: Double;
begin
  m:= Exp(Ln(10) * Digitos);
  Result:= Round(Numero*m+5/m)/m; // Así no: Result:= Round(Numero * m + 1/(m + 5)) / m;
end;

Saludos.

Última edición por ecfisa fecha: 13-09-2010 a las 01:39:28.
Responder Con Cita
  #5  
Antiguo 13-09-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Muy buena explicacion amigo.
Ahora hasta yo la puedo entender.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #6  
Antiguo 13-09-2010
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
Hola a todos

Aunque ya está resuelto, solo quiero comentar otra forma de llegar al mismo resultado. Existe la función SetRoundMode en la unidad Math.

Esto es lo que pone la ayuda:

Cita:
Description

Call SetRoundingMode to specify how the FPU handles rounding issues. The rounding mode can be any of the following values:

Value Meaning

rmNearest Rounds to the closest value.
rmDown Rounds toward negative infinity.
rmUp Rounds toward positive infinity.
rmTruncate Truncates the value, rounding positive numbers down and negative numbers up.
Entonces puedes usarla de esta forma:

Código Delphi [-]
 SetRoundMode(rmUp);
 Memo1.Lines.Clear;
 Memo1.Lines.Add(FloatToStr(RoundTo(9.975,-2)));

Saludos
Responder Con Cita
  #7  
Antiguo 13-09-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hay tantas formas de hacer una misma cosa... cada uno tiene su método/código/truco que al final llevan a la solución. Depende de la imaginación (y conocimientos) de cada uno para lograrlo
Responder Con Cita
  #8  
Antiguo 13-09-2010
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 614
Poder: 17
ingabraham Va por buen camino
Thumbs up

muchas gracias a todos,
sus respuestas han sido certera.
haber como finalizo este hilo
__________________
Enseñar es la virtud de un sabio.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como redondear un numero en un procedimiento en Firebird Gaby123 SQL 0 26-02-2007 18:25:26
Cómo Redondear a 4 decimales un campo de tipo Numérico vick Conexión con bases de datos 1 11-10-2005 01:04:23
Funcio para obtener las decimas de segundo enzo Varios 2 13-05-2005 01:06:11
Mostrar un Float como un hh:mm:ss rjsitruiz Impresión 2 04-07-2004 14:25:29


La franja horaria es GMT +2. Ahora son las 13:01:11.


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