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 07-10-2011
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: mar 2005
Posts: 94
Poder: 20
Anel Hernandez Va por buen camino
Formato de numeros convertidos a texto

Hola,

Tengo mis dudas sobre como convertir un numero almacenado en una variable con un formato determinado con alguna funcion de Delphi.

Por ejemplo, una variable que almacena el numero 5.1 quisiera convertirlo a texto con el el siguiente formato ' 5.100'.

Se hacerlo con el procedimiento str(), pero quisiera hacerlo con alguna funcion que me devuelva un string.

lo he eintentado con format y con FloatToStrF().

es posible hacerlo?

gracias
Responder Con Cita
  #2  
Antiguo 07-10-2011
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 Anel.

Usa FormatFloat.

Ejemplo:
Código Delphi [-]
var
  st: string;
  f: Double;
begin
  f:= 5.1;
  st:= FormatFloat('0.000',f);
  ShowMessage(st);
  ...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 07-10-2011
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: mar 2005
Posts: 94
Poder: 20
Anel Hernandez Va por buen camino
re

Hola,

parece ke el editor cometio un error, la idea es rellenar el numero con espacios en blanco delante y añadirle ceros detras!

' 5.100'.

El numero tiene 5 espacios en blanco delante y 2 ceros detras.

al parecer al copiar la primera vez el mensaje se borraron los espacios en blanco.

mil gracias!
Responder Con Cita
  #4  
Antiguo 07-10-2011
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 Anel.

Cita:
El numero tiene 5 espacios en blanco delante y 2 ceros detras.
Si sólo se trata de agregarle 5 espacios delante y con dos cífras decimales sería:
Código Delphi [-]
var
  st: string;
  f: Double;
begin
  f:= 5.1;
  st:= '     '+FormatFloat('0.00', f);  
  // o del mismo modo se puede hacer  st:= StringOfChar(' ', 5) + st;
  Label1.Caption:= st;
  ...

Ahora si se trata de que rellene con espacios los caracteres que le faltan a la parte entera para llegar a 5, la cosa cambia un poco:
Código Delphi [-]
...
const
  ESPACIOS = 5;
var
  st: string;
  f: Double;
begin
  f:= 5.1;
  st:= FormatFloat('0.00', f);
  st:= StringOfChar(' ', ESPACIOS -Length(Copy(st, 1, Pos(DecimalSeparator, st)-1))) + st;
  Label1.Caption:= st;
 ...

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 08-10-2011
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: mar 2005
Posts: 94
Poder: 20
Anel Hernandez Va por buen camino
re

Hola,

Gracias. La ultima de las opciones es la que necesitaba. Eso mismo se puede hacer utilizando el procedimiento str().

La pregunta era si habia alguna funcion predefinida del delphi para hacerlo de una sola vez.

En varios pasos hay varias vias.

gracias
Responder Con Cita
  #6  
Antiguo 08-10-2011
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 Anel.

No existe una función o procedimiento predeterminado que realice lo que buscas. Se necesitan al menos dos pasos, como en el código que te puse arriba, para poder lograrlo.

Por supuesto que podés crearte una:
Código Delphi [-]
function FormatNum(const Num: Double; const Mask: string; const Spc: Integer): string;
begin
   Result:= StringOfChar(' ', Spc - Length(Copy(Result, 1, Pos(DecimalSeparator, Result)-1))) + FormatFloat(Mask, Num);
end;

Uso:
Código Delphi [-]
 Label1.Caption:= FormatNum(5.1, '0.000', 5);

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 08-10-2011 a las 21:14:51. Razón: Agregar ejemplo de uso
Responder Con Cita
  #7  
Antiguo 10-10-2011
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: mar 2005
Posts: 94
Poder: 20
Anel Hernandez Va por buen camino
re

gracias ecfisa,

y si kisiera que el numero de ceros detras fuera variable? como puedo poner un mask variable? es decir que en vez de entrarle una mascara string le entre un byte con la cantidad de ceros ke kisiera.

:=FormatNum(5.1, 3, 5)?

mil gracias por tu ayuda!
Responder Con Cita
  #8  
Antiguo 10-10-2011
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: mar 2005
Posts: 94
Poder: 20
Anel Hernandez Va por buen camino
re

ecfisa,

he estado probando la funcion y si el numero es entero la posicion del separador da cero y no da un buen resultado. Me parece que seria mejor contando la parte entera:
-Length(floattostr(trunc(num)))

Quedaria solo poderle poner a la funcion la cantidad de ceros decimales a elegir.

mil gracias
Responder Con Cita
  #9  
Antiguo 10-10-2011
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 Anel Hernandez Ver Mensaje
gracias ecfisa,

y si kisiera que el numero de ceros detras fuera variable? como puedo poner un mask variable? es decir que en vez de entrarle una mascara string le entre un byte con la cantidad de ceros ke kisiera.

:=FormatNum(5.1, 3, 5)?

mil gracias por tu ayuda!
Hola.

Código Delphi [-]
function FormatNum(const Num: Double; const Ceros: Byte; const Spc: Integer): string;
begin
  if Round(Num) <> Num then  // flotante
    Result:= StringOfChar(' ', Spc - Trunc(Ln(Num)/Ln(10))+1) + FormatFloat('0.' + StringOfChar('0',Ceros), Num)
  else                       // entero
    Result:= StringOfChar(' ', Spc - Trunc(Ln(Num)/Ln(10))+1) + IntToStr(Trunc(Num)) + StringOfChar('0', Ceros);
end;

Llamada ejemplo:
Código Delphi [-]
   ShowMessage(FormatNum(123.1, 5, 0) + #10#13 + FormatNum(2, 5 , 3));

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 10-10-2011 a las 21:03:05. Razón: Agregar llamada de ejemplo
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
Formato de numeros negativos oscarac OOP 3 18-04-2011 18:24:23
Formato de Numeros y Fechas jcarteagaf Varios 1 08-11-2007 19:03:45
Numeros con formato en sql santiago14 SQL 6 21-08-2007 21:24:13
Formato numeros jzginez PHP 2 26-12-2005 16:18:56
Formato en números en un grid aip OOP 3 01-09-2004 00:29:00


La franja horaria es GMT +2. Ahora son las 05:25:27.


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