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.
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);
[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);
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);
[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]