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

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.

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…

É essa ki foi mal…


DecimalFormat formato 	= new DecimalFormat();

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

da uma procurada na net q tem varios exemplos…

espero ter ajudado

Olá,

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

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);

2 curtidas

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 é!

[quote=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);
[/quote]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í:

[code] /**
* 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;
}[/code]