[Ajuda Delphi] - Function para colocar virgula em uma string contando da Direita para esquerda.
Bom dia estimado amigos ... estou iniciando estudos em delphi e estou precisando de uma maozinha.
eu recebo uma string contendo 10 caracteres com numeros apenas ....
exemplo: String : "0000003850"
gostaria de criar uma function Virgula (valor : String , Casasdecimais:String) : String
eu gostaria que a quantidade de casas decimais , seria onde eu quero acrescentar uma virgula dentro da String, contando da direita para esquerda
exemplo : Valor := Virgula(Valor,3);
o Resultado seria :
0000003,850 := Virgula("0000003850",3)
ou seja eu passo o valor para function e onde quero colocar a virgula (quantidade de casas decimais da direita para esquerda).
algum pode me ajudar ? Antecipo cordial agradecimentos. Obrigado !!!
eu recebo uma string contendo 10 caracteres com numeros apenas ....
exemplo: String : "0000003850"
gostaria de criar uma function Virgula (valor : String , Casasdecimais:String) : String
eu gostaria que a quantidade de casas decimais , seria onde eu quero acrescentar uma virgula dentro da String, contando da direita para esquerda
exemplo : Valor := Virgula(Valor,3);
o Resultado seria :
0000003,850 := Virgula("0000003850",3)
ou seja eu passo o valor para function e onde quero colocar a virgula (quantidade de casas decimais da direita para esquerda).
algum pode me ajudar ? Antecipo cordial agradecimentos. Obrigado !!!
Mauricio Gabriel
Curtidas 0
Melhor post
Emerson Nascimento
29/09/2020
aparentemente é uma leitura de um arquivo texto para integração de dados.
se for isso, basta transformar o conteudo em valor e dividir por 10 ^ decimais.
mas se quer mesmo incluir a vírgula, não precisa criar uma função. use a função nativa.
se for isso, basta transformar o conteudo em valor e dividir por 10 ^ decimais.
mas se quer mesmo incluir a vírgula, não precisa criar uma função. use a função nativa.
str := '0000003850';
decimais := 3;
valor := strtointdef(str,0) / System.Math.Power(10, decimais); // trata do conteúdo como valor
System.Insert(',',str,length(str)-(decimais-1)); // insere a virgula na string
showmessage( floattostr( valor ) + #13 + str );GOSTEI 1
Mais Respostas
Mauricio Gabriel
29/09/2020
aparentemente é uma leitura de um arquivo texto para integração de dados.
se for isso, basta transformar o conteudo em valor e dividir por 10 ^ decimais.
mas se quer mesmo incluir a vírgula, não precisa criar uma função. use a função nativa.
se for isso, basta transformar o conteudo em valor e dividir por 10 ^ decimais.
mas se quer mesmo incluir a vírgula, não precisa criar uma função. use a função nativa.
str := '0000003850';
decimais := 3;
valor := strtointdef(str,0) / System.Math.Power(10, decimais); // trata do conteúdo como valor
System.Insert(',',str,length(str)-(decimais-1)); // insere a virgula na string
showmessage( floattostr( valor ) + #13 + str );olá Emerson , muito lhe agradeço por sua ajuda !!! ficou show de bola ...
consegui fazer aqui o implemento da sua sugestão e resolveu meu problema.
mas se possivel , poderia me ajudar com uma function ? assim eu poderei aprender como fazer.
se puder agradeço grandemente.
GOSTEI 0
Emerson Nascimento
29/09/2020
você pode fazer todo o trabalho:
ou pode fazer uso da função Insert:
para testar:
function Virgula(valor: String; Casasdecimais: word): String;
var
i, cont: word;
begin
Result := '';
cont := 0;
for i := High(Valor) downto Low(Valor) do
begin
inc(cont);
Result := valor[i] + Result;
if cont = Casasdecimais then
Result := ',' + Result;
end;
end;ou pode fazer uso da função Insert:
function Virgula(valor: String; Casasdecimais: word): String;
begin
System.Insert(',',valor,length(valor)-(Casasdecimais-1));
Result := valor;
end;para testar:
str := '0000003850'; showmessage( Virgula( str, 2 ) );
GOSTEI 1
Mauricio Gabriel
29/09/2020
você pode fazer todo o trabalho:
ou pode fazer uso da função Insert:
para testar:
function Virgula(valor: String; Casasdecimais: word): String;
var
i, cont: word;
begin
Result := '';
cont := 0;
for i := High(Valor) downto Low(Valor) do
begin
inc(cont);
Result := valor[i] + Result;
if cont = Casasdecimais then
Result := ',' + Result;
end;
end;ou pode fazer uso da função Insert:
function Virgula(valor: String; Casasdecimais: word): String;
begin
System.Insert(',',valor,length(valor)-(Casasdecimais-1));
Result := valor;
end;para testar:
str := '0000003850'; showmessage( Virgula( str, 2 ) );
Excelente Emerson !!! Muito obrigado novamente ... essa vai para meu aprendizado ...
Obrigado por compartilhar conhecimento. Espero em breve poder fazer o mesmo para outros.
GOSTEI 0
Raimundo Pereira
29/09/2020
Bom dia a todos!!
Como mencionado por Emerson Nascimento, você poderia usar as funções nativas
Segue mais uma função para melhoria::
function AplicV(Caractere,Origem: String; Casas : Integer) : String;
var Total_Char:integer;
begin
if Copy(Origem,1,1)=',' then // Verifica se o primeiro caractere é a virgula
begin
Result:='0'+Copy(Origem,1,4);
exit;
end;
if Copy(Origem,1,1)='0' then // Verifica se o primeiro caractere é Zero
begin
Result:='0'+Caractere+Copy(Origem,1,3);
exit;
end;
if (Copy(Origem,1,1)<>'0') and (Copy(Origem,1,1)<>',') and (Length(Origem)>3) then
begin
Origem:=StringReplace(Origem, ',', '',[rfReplaceAll, rfIgnoreCase]);// Retira a virgula para evitar duplicação
Result := ReverseString(Origem);
Result := Copy(Result, 1, Casas);
Total_Char:=Length(Origem)-Casas;
Result :=Copy(Origem,1,Total_Char)+Caractere+ReverseString(Result);
end;
end;
Chamada da Function::
Edit1.Text:=AplicV(',',Edit1.Text,3);
Como mencionado por Emerson Nascimento, você poderia usar as funções nativas
Segue mais uma função para melhoria::
function AplicV(Caractere,Origem: String; Casas : Integer) : String;
var Total_Char:integer;
begin
if Copy(Origem,1,1)=',' then // Verifica se o primeiro caractere é a virgula
begin
Result:='0'+Copy(Origem,1,4);
exit;
end;
if Copy(Origem,1,1)='0' then // Verifica se o primeiro caractere é Zero
begin
Result:='0'+Caractere+Copy(Origem,1,3);
exit;
end;
if (Copy(Origem,1,1)<>'0') and (Copy(Origem,1,1)<>',') and (Length(Origem)>3) then
begin
Origem:=StringReplace(Origem, ',', '',[rfReplaceAll, rfIgnoreCase]);// Retira a virgula para evitar duplicação
Result := ReverseString(Origem);
Result := Copy(Result, 1, Casas);
Total_Char:=Length(Origem)-Casas;
Result :=Copy(Origem,1,Total_Char)+Caractere+ReverseString(Result);
end;
end;
Chamada da Function::
Edit1.Text:=AplicV(',',Edit1.Text,3);
GOSTEI 1
Mauricio Gabriel
29/09/2020
Bom dia a todos!!
Como mencionado por Emerson Nascimento, você poderia usar as funções nativas
Segue mais uma função para melhoria::
function AplicV(Caractere,Origem: String; Casas : Integer) : String;
var Total_Char:integer;
begin
if Copy(Origem,1,1)=',' then // Verifica se o primeiro caractere é a virgula
begin
Result:='0'+Copy(Origem,1,4);
exit;
end;
if Copy(Origem,1,1)='0' then // Verifica se o primeiro caractere é Zero
begin
Result:='0'+Caractere+Copy(Origem,1,3);
exit;
end;
if (Copy(Origem,1,1)<>'0') and (Copy(Origem,1,1)<>',') and (Length(Origem)>3) then
begin
Origem:=StringReplace(Origem, ',', '',[rfReplaceAll, rfIgnoreCase]);// Retira a virgula para evitar duplicação
Result := ReverseString(Origem);
Result := Copy(Result, 1, Casas);
Total_Char:=Length(Origem)-Casas;
Result :=Copy(Origem,1,Total_Char)+Caractere+ReverseString(Result);
end;
end;
Chamada da Function::
Edit1.Text:=AplicV(',',Edit1.Text,3);
Como mencionado por Emerson Nascimento, você poderia usar as funções nativas
Segue mais uma função para melhoria::
function AplicV(Caractere,Origem: String; Casas : Integer) : String;
var Total_Char:integer;
begin
if Copy(Origem,1,1)=',' then // Verifica se o primeiro caractere é a virgula
begin
Result:='0'+Copy(Origem,1,4);
exit;
end;
if Copy(Origem,1,1)='0' then // Verifica se o primeiro caractere é Zero
begin
Result:='0'+Caractere+Copy(Origem,1,3);
exit;
end;
if (Copy(Origem,1,1)<>'0') and (Copy(Origem,1,1)<>',') and (Length(Origem)>3) then
begin
Origem:=StringReplace(Origem, ',', '',[rfReplaceAll, rfIgnoreCase]);// Retira a virgula para evitar duplicação
Result := ReverseString(Origem);
Result := Copy(Result, 1, Casas);
Total_Char:=Length(Origem)-Casas;
Result :=Copy(Origem,1,Total_Char)+Caractere+ReverseString(Result);
end;
end;
Chamada da Function::
Edit1.Text:=AplicV(',',Edit1.Text,3);
Muito obrigado P2 , em sua colaboração para meu aprendizado ...
GOSTEI 0