Adicionar zero a esquerda!
[b:52e3bd0ae7]Gostaria de saber como faço p/ adicionar zeros a esquerda em um campo numerico em interbase.
Em minha tabela esta sendo gravada assim ´1´, gostaria que gravasse assim ´000001´, como faço?[/b:52e3bd0ae7]
Em minha tabela esta sendo gravada assim ´1´, gostaria que gravasse assim ´000001´, como faço?[/b:52e3bd0ae7]
Anonymous
Curtidas 0
Melhor post
Wellington Telles
11/04/2017
var Numero: Integer; begin Numero:= 123; Edit1.text:= Format('%5.5d',[Numero]); // resulta '00123'; end;
Solução simples e rápida
GOSTEI 1
Mais Respostas
Afischer
08/04/2003
Caro delphiano
Tenho uma função para campos string. Se ajudar em alguma coisa, aí vai ela:
function ZeroLeft(vZero: string; vQtd: integer): string;
var
i, vTam: integer;
vAux: string;
begin
vAux := vZero;
vTam := length( vZero );
vZero := ´´;
for i := 1 to vQtd - vTam do
vZero := ´0´ + vZero;
vAux := vZero + vAux;
result := vAux;
end;
André Fischer
Tenho uma função para campos string. Se ajudar em alguma coisa, aí vai ela:
function ZeroLeft(vZero: string; vQtd: integer): string;
var
i, vTam: integer;
vAux: string;
begin
vAux := vZero;
vTam := length( vZero );
vZero := ´´;
for i := 1 to vQtd - vTam do
vZero := ´0´ + vZero;
vAux := vZero + vAux;
result := vAux;
end;
André Fischer
GOSTEI 0
Marcelo
08/04/2003
[quote:2dc7a1bb79=´Luis Rodrigo´][b:2dc7a1bb79]Gostaria de saber como faço p/ adicionar zeros a esquerda em um campo numerico em interbase.
Em minha tabela esta sendo gravada assim ´1´, gostaria que gravasse assim ´000001´, como faço?[/b:2dc7a1bb79][/quote:2dc7a1bb79]
Vode pode usar assim:
var
i:string;
begin
fmtstr:=(i,´¬.6d´,[strtoint(edit1.text)]);{6 é o numeor de casas vc quer}
edit1.text:=i;{edit1.text é o campo onde esta o numero a ser formatado}
end;
Valeu?
at+...
Em minha tabela esta sendo gravada assim ´1´, gostaria que gravasse assim ´000001´, como faço?[/b:2dc7a1bb79][/quote:2dc7a1bb79]
Vode pode usar assim:
var
i:string;
begin
fmtstr:=(i,´¬.6d´,[strtoint(edit1.text)]);{6 é o numeor de casas vc quer}
edit1.text:=i;{edit1.text é o campo onde esta o numero a ser formatado}
end;
Valeu?
at+...
GOSTEI 0
Aroldo Zanela
08/04/2003
[quote:08b3c0291c=´Luis Rodrigo´][b:08b3c0291c]Gostaria de saber como faço p/ adicionar zeros a esquerda em um campo numerico em interbase.
Em minha tabela esta sendo gravada assim ´1´, gostaria que gravasse assim ´000001´, como faço?[/b:08b3c0291c][/quote:08b3c0291c]
Luis,
Como o campo é numérico, ele vai gravar da forma que está fazendo atualmente, ou seja, sem os zeros à esquerda. Para conseguir o efetio que você deseja (gravar com zeros), teria que alterar o campo para algum tipo caracter.
Eu acredito que o melhor a se fazer e manter da forma que está e utilizar alguma função para [b:08b3c0291c]exibir com zeros a esquerda[/b:08b3c0291c].
Em minha tabela esta sendo gravada assim ´1´, gostaria que gravasse assim ´000001´, como faço?[/b:08b3c0291c][/quote:08b3c0291c]
Luis,
Como o campo é numérico, ele vai gravar da forma que está fazendo atualmente, ou seja, sem os zeros à esquerda. Para conseguir o efetio que você deseja (gravar com zeros), teria que alterar o campo para algum tipo caracter.
Eu acredito que o melhor a se fazer e manter da forma que está e utilizar alguma função para [b:08b3c0291c]exibir com zeros a esquerda[/b:08b3c0291c].
function StrZero(iNumero, iComp: Integer): String; begin Result := StringOfChar(´0´,iComp-Length(IntToStr(iNumero)))+IntToStr(iNumero); end;
GOSTEI 0
Anonymous
08/04/2003
Faça como o Aroldo Zanela falou ou use o seu campo mesmo e configure o DisplayLabel para ´000000´.
GOSTEI 0
Jeová Soares
08/04/2003
Outra forma é:
Mantenha o campo como está e utilize a segunte instrução:
label1.caption := formatfloat(´#00000´,campo1.value);
ou
edit1.text := formatfloat(´00000´,campo1.value);
Mantenha o campo como está e utilize a segunte instrução:
label1.caption := formatfloat(´#00000´,campo1.value);
ou
edit1.text := formatfloat(´00000´,campo1.value);
GOSTEI 0
Dor_poa
08/04/2003
Existem várias formas. Vejamos uma:
function tbStrZero(const I: integer; const Casas: byte): string;
var
Ch: Char;
begin
Result := IntToStr(I);
if Length(Result) > Casas then
begin
Ch := ´*´;
Result := ´´;
end
else Ch := ´0´;
while Length(Result) < Casas do Result := Ch + Result;
end;
Exemplo de como usá-la:
var
S: string;
Numero: integer;
{...}
begin
{...}
S := tbStrZero(Numero, 6);
{...}
end;
Ou Ate mesmo:
Edit1.Text := FormatFloat(´000000´,StrToFloat(Edit1.Text));
Observações: Se o comprimento desejado (Casas) não for suficiente para conter o número, serão colocados asteriscos.
function tbStrZero(const I: integer; const Casas: byte): string;
var
Ch: Char;
begin
Result := IntToStr(I);
if Length(Result) > Casas then
begin
Ch := ´*´;
Result := ´´;
end
else Ch := ´0´;
while Length(Result) < Casas do Result := Ch + Result;
end;
Exemplo de como usá-la:
var
S: string;
Numero: integer;
{...}
begin
{...}
S := tbStrZero(Numero, 6);
{...}
end;
Ou Ate mesmo:
Edit1.Text := FormatFloat(´000000´,StrToFloat(Edit1.Text));
Observações: Se o comprimento desejado (Casas) não for suficiente para conter o número, serão colocados asteriscos.
GOSTEI 0
Singular Ti
08/04/2003
Eu fiz uma assim:
Abraços!!
function PreencheZero(variavel:string; quant,posicao:integer):String; var i,tamanho:integer; aux: string; begin aux := Variavel; tamanho := length(Variavel); Variavel := ; for i:=1 to quant-tamanho do Variavel := Variavel + 0; if Posicao = 2 then aux := aux + Variavel; // esquerda if Posicao = 1 then aux := Variavel + aux; // direita Result := aux; end;
Abraços!!
GOSTEI 0
Thiago Schnell
08/04/2003
Fiz uma também !
function zerosaesquerda(s:string; quant:byte):string; begin for quant:=quant downto 1 do begin SetLength(s,succ(length(s))); Move(s[1],s[2],succ(length(s))* sizeof(char)); s[1]:=0; end; result:=s end;
GOSTEI 0
Marco Salles
08/04/2003
Muitos caminhos levam a roma . Há muitas formas ate mesmo utilizando Expressões Regulares . Mas particularmente dou preferencia sempre a utilizar a VCL e a StringOfChar na minha concepção é a que melhor se encaixa para esta finalidade.
Uma única linha , sem for sem while , simples e descomplicado
muito fácil não ???
Uma única linha , sem for sem while , simples e descomplicado
StringOfChar(SeuCaracter,QuantidadeDeCaracter-Length(SuaString))+SuaString);
muito fácil não ???
GOSTEI 0
Thiago Schnell
08/04/2003
hm com VCL...
var s:string; begin s:=zerosaesquerda; caption:=StringReplace($+copy(s,1,length(s)) ,$,0000,[]) end;
GOSTEI 0
Marco Salles
08/04/2003
hm com VCL...
var s:string; begin s:=zerosaesquerda; caption:=StringReplace($+copy(s,1,length(s)) ,$,0000,[]) end;
Não entendi .. quem é $ ??
GOSTEI 0
Marco Salles
08/04/2003
hm com VCL...
var s:string; begin s:=zerosaesquerda; caption:=StringReplace($+copy(s,1,length(s)) ,$,0000,[]) end;
quando eu disse VCl , não quiz dizer que não se consegue o efeito com funçoes Copy , StringReplace, Length da VCL . O que me refero é que a StringOfChar é a função recomendada da VCL para esta finalidade como o próprio Help do Delphi a enuncia
Returns a string with a specified number of repeating characters.
In Delphi code, StringOfChar returns a string that contains Count characters, with the character value given by Ch. For example,
S := StringOfChar(A, 10);
sets S to the string AAAAAAAAAA.
In Delphi code, StringOfChar returns a string that contains Count characters, with the character value given by Ch. For example,
S := StringOfChar(A, 10);
sets S to the string AAAAAAAAAA.
GOSTEI 0
Joatan Lima
08/04/2003
[quote:08b3c0291c=´Luis Rodrigo´][b:08b3c0291c]Gostaria de saber como faço p/ adicionar zeros a esquerda em um campo numerico em interbase.
Em minha tabela esta sendo gravada assim ´1´, gostaria que gravasse assim ´000001´, como faço?[/b:08b3c0291c][/quote:08b3c0291c]
Luis,
Como o campo é numérico, ele vai gravar da forma que está fazendo atualmente, ou seja, sem os zeros à esquerda. Para conseguir o efetio que você deseja (gravar com zeros), teria que alterar o campo para algum tipo caracter.
Eu acredito que o melhor a se fazer e manter da forma que está e utilizar alguma função para [b:08b3c0291c]exibir com zeros a esquerda[/b:08b3c0291c].
Como usar no delphi (como chamar)?
Em minha tabela esta sendo gravada assim ´1´, gostaria que gravasse assim ´000001´, como faço?[/b:08b3c0291c][/quote:08b3c0291c]
Luis,
Como o campo é numérico, ele vai gravar da forma que está fazendo atualmente, ou seja, sem os zeros à esquerda. Para conseguir o efetio que você deseja (gravar com zeros), teria que alterar o campo para algum tipo caracter.
Eu acredito que o melhor a se fazer e manter da forma que está e utilizar alguma função para [b:08b3c0291c]exibir com zeros a esquerda[/b:08b3c0291c].
function StrZero(iNumero, iComp: Integer): String; begin Result := StringOfChar(´0´,iComp-Length(IntToStr(iNumero)))+IntToStr(iNumero); end;
Como usar no delphi (como chamar)?
GOSTEI 0
Arthur Heinrich
08/04/2003
[b:52e3bd0ae7]Gostaria de saber como faço p/ adicionar zeros a esquerda em um campo numerico em interbase.
Em minha tabela esta sendo gravada assim ´1´, gostaria que gravasse assim ´000001´, como faço?[/b:52e3bd0ae7]
Em minha tabela esta sendo gravada assim ´1´, gostaria que gravasse assim ´000001´, como faço?[/b:52e3bd0ae7]
Se o campo é numérico, ele armazena números em formato binário. Portanto, não é possível armazenar os zeros à esquerda, que não tem relevância para números.
O seu problema está relacionado à exibição dos valores armazenados e não ao armazenamento em si.
Existem duas formar de você resolver este problema.
1 - Alterar as telas e relatórios onde o número é exibido, para exibi-los com formatação, conforme algumas sugestões acima.
2 - Alterar o modelo e armazenar seu "código" numérico em colunas do tipo VARCHAR, que podem armazenar números já formatados.
Neste caso, é importante armazenar os valores sempre formatados, o que pode ser garantido por uma trigger, e, no momento de consultar, lembre-se de sempre comparar com valores texto, formatados.
GOSTEI 0