Вы находитесь на странице: 1из 6

LABORATRIO 06

Formatando a sada em Java



Prof. Max Santana Rolemberg Farias

Neste laboratrio utilizaremos a classe NumberFormat, e Format disponvel
no CD do livro Core Java 2 Volume I, para formatar sada em J ava.

1. Introduo

Na linguagem J ava voc pode controlar o formato do que exibido a fim de
organizar a sada de dados de forma adequada. A classe NumberFormat do
pacote java.text tem trs mtodos que empregam formatos padro para:
nmero, valores monetrios e valores de percentuais.

Para obter um formatador para a localizao padro, use um dos trs mtodos
a seguir:

NumberFormat.getNumbergInstance()
NumberFormat.getCurrencyInstance()
NumberFormat.getPercentInstance()

Cada um desses mtodos retorna um objeto do tipo NumberFormat. Voc
pode usar esse objeto para formatar um ou mais nmeros.

Em seguida, aplica-se o mtodo format ao objeto NumberFormat para obter
um string que contm o nmero formatado. Uma vez tendo a string com o
nmero formatado, provavelmente voc vai querer simplesmente exibir o novo
nmero formatado.

2. Especificaes

Voc tambm pode querer especificar o nmero mnimo e mximo de dgitos
inteiros ou de dgitos fracionrios a exibir. Isso pode ser feito atravs dos
mtodos da classe NumberFormat:

setMinimumIntegerDigits
setMinimumFractionDigits
setMaximumIntegerDigits
setMaximumFractionDigits

Observao
A especificao do nmero mximo de dgitos fracionrios geralmente til. O
ltimo dgito exibido arredondado para cima se o primeiro dgito descartado
for superior ou igual a 5. Se voc quiser mostrar zeros iniciais, especifique o
nmero mnimo de dgitos fracionrios igual ao mximo. Caso contrrio, ter de
deixar o nmero mnimo de dgitos fracionrios igual ao valor padro que 0.
A especificao do nmero de dgitos inteiros muito menos comum.
Especificar um nmero mnimo fora a exibio de zeros iniciais para valores
menores. Especificar um nmero mximo perigoso, pois o valor exibido
poder ser truncado sem que ningum perceba, resultando num nmero bem
formatado, mas totalmente errado.

3. Formato particular

Voc pode criar tambm um formato particular. Para fazer isso, necessrio
definir um objeto DecimalFormat que indica a forma desejada dos nmeros.

As exigncias de formatao so indicadas em uma string de formatao que
mostra como o nmero deve ficar. No programa desse laboratrio podemos ver
exemplos de formatao.

4. API java.text.NumberFormat

Mtodos Descrio
st at i c Number For mat
get Cur r encyI nst ance( )
Retorna um objeto NumberFormat para
converter valores de moeda em string
usando as convenes locais.
st at i c Number For mat
get Number I nst ance( )
Retorna um objeto NumberFormat para
formatar nmeros usando as converes
loacis.
st at i c Number For mat
get Per cent I nst ance( )
Retorna um objeto NumberFormat para
converter percentuais em strings.
voi d set Maxi mumFr act i onDi gi t s( i nt
di gi t os)
Parmetro: dgitos, o nmero de dgitos a
serem exibidos;
Especifica o nmero mximo de dgitos
antes do separador decimal do objeto de
formatao. Use este mtodo com extrema
cautela. Se forem especificados dgitos
menos, ento o nmero ser simplesmente
truncado.
voi d set Mi ni mumFr act i onDi gi t s( i nt
di gi t os)
Parmetro: dgitos, o nmero de dgitos a
serem exibidos;
Especifica o nmero mnimo de dgitos
antes do separador decimal do objeto de
formatao. Se o nmero tiver menos
dgitos fracionrios que o mnimo, ento
sero acrescentados zeros.
voi d set Mi ni mumI nt eger Di gi t s( i nt
di gi t os)
Parmetro: dgitos, o nmero de dgitos a
serem exibidos;
Especifica o nmero mnimo de dgitos
antes do separador decimal do objeto de
formatao. Se o nmero tiver menos
dgitos fracionrios que o mnimo, ento
sero acrescentados zeros na frente.

5. API java.text.DecimalFormat

Mtodos Descrio
voi d Deci mal For mat ( St r i ng padr o)
Parmetro: padrao, a string de formatao;
Retorna um objeto DecimalFormat que
segue o padro fornecido para a converso
de nmeros em strings.


6. Criando o projeto

Crie o projeto Laboratorio_06 no workspace do eclipse.

7. Criando o pacote corejava

Com o projeto J ava criado, vamos criar a package corejava, como no
Laboratrio 05.

8. Importando o pacote corejava

Idem Laboratrio 05.

9. Criando a classe

Com o projeto J ava criado, vamos criar uma classe com o mtodo main e com
o nome Formatacao.

Complete o cdigo de forma que ele fique idntico ao cdigo abaixo:

import j ava. t ext . *;

public class For mat acao {
public static void mai n( St r i ng[ ] ar gs) {
double x;
x = 10000. 0 / 3. 0;
/ / I mpr i me na sa da padr o o val or de x semf or mat ao
Syst em. out . pr i nt l n( x) ;
Number For mat nf = Number For mat . get Number I nst ance( ) ;
St r i ng f x = nf . f or mat ( x) ; / / a st r i ng ser " 3. 333, 33"
Syst em. out . pr i nt l n( f x) ;
/ / Especi f i cando o nmer o m ni mo e mxi mo de d gi t os
nf . set Maxi mumFr act i onDi gi t s( 4) ;
nf . set Mi ni mumI nt eger Di gi t s( 6) ;
f x = nf . f or mat ( x) ; / / a st r i ng ser " 003. 333, 3333"
Syst em. out . pr i nt l n( f x) ;
/ / Cr i ando f or mat aao par t i cul ar
Deci mal For mat df = new Deci mal For mat ( " 0. #####" ) ;
/ / I mpr i me o nmer o 3333, 333333
Syst em. out . pr i nt l n( df . f or mat ( x) ) ;
} / / Fi mdo mt odo mai n
} / / Fi mda cl asse For mat ao

Para que possa funcionar certifique-se de adicionar a linha abaixo:

import java.text.*;

10. Executando a classe Formatacao

Clique no boto para executar a classe, e observe o resultado da
execuo do seu projeto no console.

11. String de formatao para a classe Decimalformat

Smbolo Significado
0 Um dgito
# Um dgito; no mostrado se for um zero na frente ou no fim
. (ponto) Localizao de separador decimal
, (virgula) Localizao de separador de grupo
; (ponto e virgula) Separa formatos de nmeros positivos e negativos
- (sinal de menos) Prefixo negativo
% (percentual) Multiplica por 100 e mostra na forma percentual
Qualquer outro smbolo Inclui o smbolo na string da sada

O mecanismo da classe DecimalFormat funciona bem para formatar nmeros
que so valores monetrios.

Contudo, no adequado para notao cientfica, tabelas com colunas de
largura fixa, ou nmeros em formato octal ou hexadecimal. Para essas
aplicaes, pode-se usar a classe Format fornecida pelo livro Core Java 2
Volume I.

12. Instrues da classe Format

O livro Core Java 2 Volume I alm de oferecer uma classe Console para ler
facilmente nmeros da tela, como tambm oferece uma classe que pode
formatar nmeros com menos dificuldades que a classe NumberFormat.

Eles simplesmente refizeram a famosa funo printf da linguagem C que tem
um bom conjunto de opes de formatao e , na maior parte, fcil de usar.

Por exemplo, para formatar um nmero de ponto flutuante com um tamanho de
campo 10 e dois dgitos depois do separador decimal, podemos usar:

For mat . pr i nt f ( " Pagament o mensal %10. 2f \ n" , pagament o) ;

Se voc preferir colocar essa string numa varivel string, use:

St r i ng s = new For mat ( " Pagament o mensal
%10. 2f \ n" ) . f or mat ( pagament o) ;

A string de sada contm todos os caracteres da string de formatao, exceto
que a especificao de formato (comeando com um %) substituda pelo
valor formatado. Por sua vez, %% representa um sinal de percentual.

Diferente do printf, s possvel um valor formatado de cada vez. Se for
necessrio imprimir dois valores, use duas chamadas.

For mat . pr i nt f ( " Comt axa %6. 3f " , 100 * y) ;
For mat . pr i nt f ( " %%, seu pagament o mensal %10. 2f \ n" ,
pagament o) ;

Deixando de lado o formato %m.nf, o mais comum %nd para imprimir um
inteiro em um campo com tamanho n. Com esses dois j d pra fazer muita
coisa e talvez voc nunca mais precise aprender cdigos de formatao!

Eis as regras dos especificadores de formatao. O cdigo comea com um %
e termina com uma das letras c, d, e, E, f, g, G, i, o, s, x, X que tm o seguinte
significado:

f - nmero de ponto flutuante em formato fixo
e, E - nmero de ponto flutuante em notao exponencial
(formato cientifico). O formato E resulta na letra E maiscula
para o expoente (como em 1.14130E+003) e o formato e numa
letra minscula e.
g, G - nmero de ponto flutuante em formato gentico (formato fixo para
nmeros pequenos, formato exponencial para nmero grandes).
Os zeros finais so suprimidos. O formato G resulta numa letra E
maiscula para o expoente (se algum) e o formato g na letra
minscula g.
d, i - inteiros em decimal.
x, X - inteiros em hexadecimal (com a letra X em minscula ou
maiscula).
o - inteiros em octal.
s - string
c - caractere

Entre o % e o cdigo de formatao ficam os campos indicados a seguir. Eles
todos so opcionais.

+ - fora a exibio de um +nos nmeros positivos
0 - mostra zeros iniciais.
- - alinha o contedo do campo esquerda
espao insere um espao na frente de nmeros positivos
# - usa um formato alternativo; adiciona 0 ou 0x aos nmeros
octais e hexadecimais respectivamente; no suprime os zeros
finais no formato de ponto flutuante genrico.

13. Criando a classe

Crie uma classe com o mtodo main e com o nome TesteFormat.

Complete o cdigo de forma que ele fique idntico ao cdigo abaixo:

import cor ej ava. *;

public class Test eFor mat {
public static void mai n( St r i ng[ ] ar gs) {
double pagament o = 300. 00;
/ / I mpr i me 300. 00
For mat . pr i nt f ( " Pagament o mensal %10. 2f \ n" ,
pagament o) ;
St r i ng s = new For mat ( " Pagament o mensal
%3. 5f \ n" ) . f or mat ( pagament o) ;
Syst em. out . pr i nt l n( " " ) ;
Syst em. out . pr i nt l n( s) ; / / I mpr i me 300. 00000
} / / Fi mdo mt odo mai n
} / / Fi mda cl asse Test eFor mat

Para que possa funcionar certifique-se de adicionar a linha abaixo:

import corejava.*;

14. Executando a classe TesteFormat

Clique no boto para executar a classe, e observe o resultado da execuo no
console.

Вам также может понравиться