Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Varios
Register FAQ Members List Calendar Guía de estilo Today's Posts

Coloboración Paypal con ClubDelphi

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 12/09/2010
ingabraham's Avatar
ingabraham ingabraham is offline
Miembro
 
Join Date: Aug 2007
Posts: 614
Poder: 20
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.
Reply With Quote
  #2  
Old 12/09/2010
Caral's Avatar
[Caral] Caral is offline
Miembro Premium
 
Join Date: Aug 2006
Posts: 7,659
Poder: 28
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
Reply With Quote
  #3  
Old 12/09/2010
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
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.
Reply With Quote
  #4  
Old 13/09/2010
Caral's Avatar
[Caral] Caral is offline
Miembro Premium
 
Join Date: Aug 2006
Posts: 7,659
Poder: 28
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
Reply With Quote
  #5  
Old 13/09/2010
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví 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;
Reply With Quote
  #6  
Old 13/09/2010
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
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
Quote:
Originally Posted by Caral View Post
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.

Last edited by ecfisa : 13/09/2010 at 01:15.
Reply With Quote
  #7  
Old 13/09/2010
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
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.

Last edited by ecfisa : 13/09/2010 at 01:39.
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Como redondear un numero en un procedimiento en Firebird Gaby123 SQL 0 26/02/2007 18:25
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
Funcio para obtener las decimas de segundo enzo Varios 2 13/05/2005 01:06
Mostrar un Float como un hh:mm:ss rjsitruiz Impresión 2 04/07/2004 14:25


All times are GMT +2. The time now is 01:52.


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