Baixe o app para aproveitar ainda mais
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.
Compartilhar