Olá pessoal,
preciso ter apenas duas casas decimais depois do ponto usando um BigDecimal…
Teoricamente seria só fazer isso :
respostaQuest.getValor().setScale(2, BigDecimal.ROUND_DOWN)
ou então :
[b]NumberFormat formatter = new DecimalFormat("#0 .00");
String tempTest = formatter.format(respostaQuest.getValor());
new BigDecimal(tempTest)
[/b]
A questão é, não funfa … Não consigo ter o resultado que quero por exemplo pegar
um BigDecimal 33.333333333333 e transaformar num BigDecimal 33.33 …
Alguém consegue me ajudar ? Grato !
cido18
Abril 8, 2013, 8:12pm
#2
Quase!
Acontece que objetos BigDecimal são imutáveis. Quer dizer, o método setScale não altera o número e sim retorna um novo. Tem que “re-atribuir” o número retornado para a variável desejada:
BigDecimal valorArredondado = respostaQuest.getValor().setScale(2, BigDecimal.ROUND_DOWN);
respostaQuest.setValor(valorArredondado);
BigDecimal num = new BigDecimal(33.333333333333);
DecimalFormat df = new DecimalFormat("#,##0.00");
String teste = df.format(num);
System.out.println(teste);
OU
BigDecimal num = new BigDecimal(33.333333333333);
BigDecimal teste = num.setScale(2,BigDecimal.ROUND_DOWN);
System.out.println(teste);
testa ae mano…
falow
Olá gomesrod,
entendi o que você disse, o problema é realmente esse o resultado não muda,
tentei sua solução aqui e ainda não foi …
Tentei até isso no desespero rs :
[code]BigDecimal valorArredondado = respostaQuest.getValor().setScale(2, BigDecimal.ROUND_DOWN);
respostaQuest.setValor(null);
respostaQuest.setValor(valorArredondado); [/code]
Tá complicado, tem outra ideia ?
cara testa o de cima??
vc testou o DecimalFormat??
lembrando que o metodo format retorna uma String
[]s,
Bom dia marcelo.silva.java,
Eu tive que mudar o formato passado como parametro para me atender, por algum motivo não passa dessa linha quando tento fazer assim …
DecimalFormat df = new DecimalFormat("#0.00");
Caríssimos colegas,
tive uma evolução, com base no código abaixo :
[code]BigDecimal resultadoTemp = new BigDecimal(entry.getValue().intValue() * 100 / totalQuestionarios);
BigDecimal resultadoFinal = resultadoTemp.setScale(2, BigDecimal.ROUND_UP);
[/code]
O resultado esperado era 33.33 … Resumindo é pq eu dividi 100 por 3 …
No caso meu resultado agora esta vindo 33.00 …
Alguma ideia dq possa ser ?
entry.getValue().intValue() * 1 / totalQuestionarios
Os tipos são int, int e int, não? O resultado é um int.
Suponha que entry.getValue() = 100 e totalQuestionarios = 3.
Então 1 * 100 / 3 = 33, não 33.333333
Para a conta que você quer fazer funcionar corretamente, use algo como:
new BigDecimal (entry.getValue()).multiply (new BigDecimal ("100")).divide (totalQuestionarios, 2, RoundingMode.HALF_EVEN);
OBRIGADÃO entanglement !!! Era isso mesmo !!!
Nossa, queria agradecer a todos pelo empenho e me ajudar, foi a primeira vez postei uma pergunta em forum,
salvaram meu emprego ! kkkkkkk
Segue como ficou :
BigDecimal resultadoTemp = new BigDecimal (entry.getValue()).multiply(new BigDecimal("100")).divide(totalQuestionarios, 2, RoundingMode.HALF_EVEN);
BigDecimal resultadoFinal = resultadoTemp.setScale(2);
MUITO OBRIGADO MESMO !!!
Só lembrando que o “2” que eu botei no “divide” com 3 parâmetros serve para deixar a escala com 2, não necessitando usar o tal do “setScale (2)”