Buscar

Perl 14

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

{formatação}
 
Para termos uma saída, impressa ou gravada, formatada, usamos printf .
(Se você não se lembra que gravamos um registro "printando", reveja a aula 6).
A fórmula é:
printf "formatação",variável;
No lugar de formatação temos:
l % ns - para termos n caracteres (teremos brancos à esquerda para completar o string).
l % nd - para editarmos um número inteiro formatado com n dígitos (também teremos brancosà esquerda).
l % m.nf - para termos números com decimais formatados com m dígitos NO TOTAL (incluindo
o ponto) sendo n dígitos na parte decimal.
Exemplos:
 $x = "abcd"; printf "%8s",$x;
Serão printados: quatro brancos mais abcd (bbbbabcd).
Com números:
 $y = 29.40; printf "%8.3f",$y;
Serão printados dois brancos e o número com TRÊS decimais (zero à direita) - bb29.400
IMPORTANTE: Não se esqueça de que a formatação aparece entre aspas! 
Pelo visto no capítulo anterior você poderia pensar que, para transformar um número com o
separador ponto em um string semelhante com o separador vírgula bastaria fazer:
 $x = 8.69; $x=~s/./,/;
Lêdo engano, como diria Machado de Assis.
O resultado seria:
 ,.68999999 etc.
Isso porque:
14.1 FORMATAÇÃO DO PRINT 
14.2 DECIMAIS BRASILEIROS 
1. Você não se lembra mas o ponto é um caractere curinga nesse negócio de "achar e
trocar". Então, na realidade mandamos o PERL substituir o primeiro "qualquer caractere"
por uma vírgula. Foi o que ele fez substituindo o 8 por uma vírgula.
2. Depois, quando operamos com decimais, se não editamos o resultado, o PERL considera uma
precisão de 18 casas decimais - donde: SEMPRE EDITE RESULTADOS DE OPERAÇÕES COM
NÚMEROS!
No caso em que não queiramos printar diretamente mas jogar numa variável um número com
decimais editado "brasileiramente" existe a função: sprintf que usa aquelas mesmas fórmulas
de formatação do printf.
Para resolver o problema de substituir O PONTO e não haver confusão com caractere curinga
temos de simbolizar o nosso ponto por: \ . (barra invertida-ponto).
Assim, para colocarmos numa variável $xbras aquele $x com o separador brasileiro teríamos que
fazer:
 $xbras = sprintf("%4.2f",$x); $xbras=~s/\./,/;
Então teríamos em $xbras: 8,69
É meio complicado mesmo, mas funciona!
DICA: Arquive sempre os valores numéricos contendo decimais (preço, por exemplo) com o
separador americano.Converta na entrada e desconverta na saída.

Outros materiais