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 12-09-2010
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 614
Poder: 17
ingabraham Va por buen camino
redondear decimas de un float como excel.

hola
tengo un numero real 9,975

mi funcion en delph
Código Delphi [-]
roundto(numeroreal,-2)
=9,97

en excel me da= 9,98 osea cuando es 5 lo sube
y en delphi lo baja

que funcion puedo utilizar en delphi para esto
gracias,
__________________
Enseñar es la virtud de un sabio.
Responder Con Cita
  #2  
Antiguo 12-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
Esto redondea pero no se si es lo que buscas.
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var a,b: Real;
begin
  a:= StrToFloat(Edit1.Text);
  b:= Round(a);
  Edit2.Text:= Format('%8.2n',[b]);
end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 12-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.

Agrego otra posibilidad a la expuesta por el amigo Caral.
Código Delphi [-]
function RedondeaPorExceso(Numero: Double; Digitos: Integer): Double;
var
  m: Double;
begin
  m:= Exp(Ln(10) * Digitos);
  Result:= Round(Numero * m + 1/(m + 5)) / m;
end;

Saludos.
Responder Con Cita
  #4  
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
  #5  
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.039
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
  #6  
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
  #7  
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
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 07:03:25.


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