O que faço para fomatar um BigDecimal com apenas duas casas decimais?

6 respostas
C

Caros, alguem pode me ajudar, mostrando como devo fazer para formatar o resultado do metodo BigDecimal.add(valor) com apenas duas casas decimais, desde ja agradeço a todos.

Att.

6 Respostas

N

Com a classe FormatNumber… tem um método dela q faz isso pra vc… ai tem ## e 00 para vc formatar da uma pesquisada nisso…

N

É essa ki foi mal…

DecimalFormat formato 	= new DecimalFormat();

formato.applyPattern("###,###.00000");

da uma procurada na net q tem varios exemplos…

espero ter ajudado

1112

Olá,

Use a classe java.text.NumberFormat. Dê uma olhada em http://java.sun.com/javase/6/docs/api/java/text/NumberFormat.html

dudaskank

Bom, se você quer armazenar apenas 2 casas decimais, pode tentar assim também:

x = new BigDecimal(2);
y = new BigDecimal(5);
resultado = x.add(y).setScale(2, RoundingMode.HALV_EVEN);

:slight_smile:

[edit]

Opa lembrei de outro, o String.format:

String resultado = String.format("%.2f", numero);

ou se quiser Locale também…

String resultado = String.format(Locale.getDefault(), "%.2f", numero);

root_

Bom, ja que a preocupação nao é arredondamento, e sim a quatidade de casas decimais… logo abaixo vai a função que criei para isso:

private BigDecimal casasDecimais(int casas, BigDecimal valor)
{
    String quantCasas = "%."+casas+"f", textoValor = "0";
    try
    {
        textoValor = String.format(Locale.getDefault(), quantCasas, valor);
    }catch(java.lang.IllegalArgumentException e)
    {
        // Quando os digitos com 2 casas decimais forem Zeros, exemplo: 0.000001233888.
        // Nao existe valor 0,00 , logo entra na java.lang.IllegalArgumentException.
        if(e.getMessage().equals("Digits < 0"))
            textoValor = "0";
        System.out.println(e.getMessage());
    }
    return new BigDecimal(textoValor.replace(",", "."));
}

Exemplo de utilização:

BigDecimal item1 = new BigDecimal(5);
BigDecimal item2 = new BigDecimal(3);

BigDecimal resultado = casasDecimais(2, item1.divide(item2, MathContext.DECIMAL32) );

Espero que seja util… pelo menos para mim é!

romuloff
dudaskank:
Bom, se você quer armazenar apenas 2 casas decimais, pode tentar assim também:
x = new BigDecimal(2);
y = new BigDecimal(5);
resultado = x.add(y).setScale(2, RoundingMode.HALV_EVEN);
:) [edit] Opa lembrei de outro, o String.format:
String resultado = String.format("%.2f", numero);
ou se quiser Locale também...
String resultado = String.format(Locale.getDefault(), "%.2f", numero);
coloquei o setScale em todos metodos de acesso à BigDecimal's da minha aplicação. tava dando um pocado de problema nos metodos equals... Pra quem quiser algo no contexto de DecimalFormat, tá aí:
/**
     * padrao brasileiro #######0,0000
     * @return java.text.DecimalFormat used in application
     */
    private static DecimalFormat getApplicationDecimalFormat() {

        Locale brasil = new Locale( "pt", "BR" );
        DecimalFormat numberFormat = new DecimalFormat( "#######0.0000", new DecimalFormatSymbols( brasil ) );
        numberFormat.setParseBigDecimal( true );
        numberFormat.setDecimalSeparatorAlwaysShown( true );
        numberFormat.setMinimumFractionDigits( 4 );
        return numberFormat;
    }
Criado 8 de fevereiro de 2007
Ultima resposta 24 de jul. de 2009
Respostas 6
Participantes 6