Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Rellenar con 0 a la izquierda (https://www.clubdelphi.com/foros/showthread.php?t=94417)

compuin 01-02-2020 18:13:18

Rellenar con 0 a la izquierda
 
Hola foro

Estoy usando este format para colocar una expresion en HH,MM y SS

Necesito que me exprese 21H 04M 03S, en lugar de 21H 4M 3S

Es decir, a los numeros menores a 10, que les agregue el 0 a la izquierda

Este es mi format

Código Delphi [-]
format('%dh %d'' %d"',[d, trunc(m), trunc(s)]);

Gracias de antemano

lucho6007 01-02-2020 19:50:29

Format
 
Hola! Lo podés resolver con Format('%.2d:%.2d', [Hora, Minutos]), suponiendo que Hora y Minutos sean valores Integer.


Saludos,
Lucho6007

compuin 01-02-2020 19:52:59

Cita:

Empezado por lucho6007 (Mensaje 535486)
Hola! Lo podés resolver con Format('%.2d:%.2d', [Hora, Minutos]), suponiendo que Hora y Minutos sean valores Integer.


Saludos,
Lucho6007

Hola Lucho

Esta es la funcion que la calcula

Código Delphi [-]
function TimeToStr(angle:extended):string;
var
  d : integer;
  m, s : extended;
begin
  d:= Trunc(angle);
  m:= abs(frac(angle)*60);
  s:= Round(abs(frac(m)*60));
  Result:= format('%dh %d'' %d"',[d, trunc(m), trunc(s)]);
end;

lucho6007 01-02-2020 19:57:42

Cita:

Empezado por compuin (Mensaje 535487)


Código Delphi [-]
function TimeToStr(angle:extended):string; 
var   d : integer;   m, s : extended; begin   d:= Trunc(angle);   m:= abs(frac(angle)*60);   s:= Round(abs(frac(m)*60));   Result:= format('%2dh %2d'' %2d"',[d, trunc(m), trunc(s)]); end;

Probá con ese código

compuin 01-02-2020 19:58:53

Estimado Lucho,

Esta solucion funciona

Muchas gracias

escafandra 01-02-2020 21:11:25

Cita:

Empezado por compuin (Mensaje 535489)
Estimado Lucho,

Esta solucion funciona

Muchas gracias


No. No creo que funcione de esa manera. Para especificar la precisión hay que colocar el carácter "." y el "ancho".


Si estuviésemos usando la API wsprintf basta con poner el ancho con un cero delante o el carácter precisión. Con Format solo funciona con el carácter precisión y el ancho.


Tres ejemplos:
Código Delphi [-]
function TimeToStr(angle: extended): string;
var
  d: integer;
  m, s: extended;
begin
  d:= Trunc(angle);
  m:= abs(frac(angle)*60);
  s:= Round(abs(frac(m)*60));
  Result:= format('%.2dh %.2d'' %.2d"',[d, trunc(m), trunc(s)]);
end;


Código Delphi [-]
function wsprintf(lpOut, lpFmt: PAnsiChar): Integer; cdecl; varargs; external 'User32.dll' name 'wsprintfA';



function TimeToStr2(angle:extended):string;
var
  D: integer;
  M,S: Extended;
  Str: array [0..80] of AnsiChar;
begin
  d:=Trunc(angle);
  m:=abs(frac(angle)*60);
  s:=Round(abs(frac(m)*60));
  wsprintf(Str, '%02dh %02d'' %02d"', d, trunc(m), trunc(s));
  Result:= Str;
end;


Código Delphi [-]
function wsprintf(lpOut, lpFmt: PAnsiChar): Integer; cdecl; varargs; external 'User32.dll' name 'wsprintfA';



function TimeToStr3(angle:extended):string;
var
  D: integer;
  M,S: Extended;
  Str: array [0..80] of AnsiChar;
begin
  d:=Trunc(angle);
  m:=abs(frac(angle)*60);
  s:=Round(abs(frac(m)*60));
  wsprintf(Str, '%.2dh %.2d'' %.2d"', d, trunc(m), trunc(s));
  Result:= Str;
end;


Saludos.

lucho6007 01-02-2020 21:14:48

escafandra, fue lo que le pasé en el primer comentario, que luego en mi respuesta me "comí" el punto (.).


Gracias por aclarar este tema

compuin 02-02-2020 01:20:24

Cita:

Empezado por lucho6007 (Mensaje 535492)
escafandra, fue lo que le pasé en el primer comentario, que luego en mi respuesta me "comí" el punto (.).


Gracias por aclarar este tema

Muchas gracias escafandra por la aclaratoria


La franja horaria es GMT +2. Ahora son las 22:58:30.

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