Formatar Campo

9 respostas
nandobgi

Pessoal estou usando a classe DecimalFormat para fazer a formatação de um campo valor unitário.
Atualmente utilizo essa mascara

new DecimalFormat("#,##0.00")

Agora estou precisando de 4 casas decimais, mas gostaria de apresentar as 4 casas se existir um valor significativo.

Exemplo:

6.9500 --> Aqui deve formatar dessa forma 6,95

4.9501 --> Aqui deve formatar dessa forma 4,9501

Como posso fazer isso?

Grato

9 Respostas

M

voce pode criar um método format, que divide o numero e passa para string somente para apresentar para o usuário…

willricardo

Cara vc pode usar o metodo abaixo da classe DecimalFormat:

setMaximumFractionDigits(4); // seta o maximo de casas decimais a ser mostrada

abraços

willricardo

nandobgi:
Pessoal estou usando a classe DecimalFormat para fazer a formatação de um campo valor unitário.
Atualmente utilizo essa mascara

new DecimalFormat("#,##0.00")

Agora estou precisando de 4 casas decimais, mas gostaria de apresentar as 4 casas se existir um valor significativo.

Exemplo:

6.9500 --> Aqui deve formatar dessa forma 6,95

4.9501 --> Aqui deve formatar dessa forma 4,9501

Como posso fazer isso?

Grato

Cara vc pode usar o metodo abaixo da classe DecimalFormat:

setMaximumFractionDigits(4); // seta o maximo de casas decimais a ser mostrada

abraços

T

Que eu saiba, zeros à direita também são significativos (estranho mas é verdade).

Mas de qualquer maneira, se você quiser tirar os zeros à direita que sobrarem, pode tentar usar "replaceAll". Vou dar um exemplo:

import java.text.*;
import java.util.*;

class TesteZerosDireita {
    public static void main(String[] args) {
        double testes[] = {
            1234.0,
            1234.1,
            1234.12,
            1234.123,
            1234.1234,
            1234.12344321
        };
        DecimalFormatSymbols dfs = new DecimalFormatSymbols (new Locale ("pt", "BR"));
        DecimalFormat df = new DecimalFormat ("#,##0.0000", dfs);
        for (double teste : testes) {
            String s = df.format (teste); 
            // A expressão regular abaixo tira todos os zeros à direita, mas deixa uma vírgula se for o caso.
            String t = s.replaceAll ("0+$", "");
            // A expressão regular abaixo tira todos os zeros à direita, e se for o caso tira também a vírgula.
            String u = s.replaceAll ("(,0+|0+)$", "");
            System.out.println ("[" + teste + "]->[" + s + "]->[" + t + "]->[" + u + "]");
        }
    }
}

Ele deve imprimir:

[1234.0]->[1.234,0000]->[1.234,]->[1.234]
[1234.1]->[1.234,1000]->[1.234,1]->[1.234,1]
[1234.12]->[1.234,1200]->[1.234,12]->[1.234,12]
[1234.123]->[1.234,1230]->[1.234,123]->[1.234,123]
[1234.1234]->[1.234,1234]->[1.234,1234]->[1.234,1234]
[1234.12344321]->[1.234,1234]->[1.234,1234]->[1.234,1234]
nandobgi

Atualmente estou formatando direto no campo do iReport(é a unica opção que tenho)

new DecimalFormat("#,##0.0000").format(new Double($F{VALOR_UNITARIO}))

Dessa forma ele sempre formata com 4 digitos

6.9500
4.9501

O que eu preciso é quando os 4 digitos forem usados o valor seja formatado 4.9501 --> 4,9501 ou
6.9500 --> 6,95 / ou ainda 5.0000 --> 5,00.

Talvez não estou conseguindo explicar corretamente.

Grato

M

Que tal:

new DecimalFormat("#,##0.00##").format(new Double($F{VALOR_UNITARIO}))
nandobgi

Marco acertou na mosca era isso mesmo, obrigado pela ajuda.

[ ]'s

T

Não tinha pensado em “.00##”. Boa idéia!

M

nandobgi:

Que tal:
new DecimalFormat("#,##0.00##").format(new Double($F{VALOR_UNITARIO}))

Marco acertou na mosca era isso mesmo, obrigado pela ajuda.

[ ]'s


Disponha. :wink:

Obrigado pelo elogio. :slight_smile:

Criado 9 de fevereiro de 2009
Ultima resposta 9 de fev. de 2009
Respostas 9
Participantes 5