gomesrod 8 de abr. de 2013
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 );
marcelo.silva.java 8 de abr. de 2013
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
networking.rafael 8 de abr. de 2013
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 :
BigDecimal valorArredondado = respostaQuest.getValor().setScale(2, BigDecimal.ROUND_DOWN);
respostaQuest.setValor(null);
respostaQuest.setValor(valorArredondado);
Tá complicado, tem outra ideia ?
marcelo.silva.java 8 de abr. de 2013
cara testa o de cima??
vc testou o DecimalFormat??
lembrando que o metodo format retorna uma String
[]s,
networking.rafael 9 de abr. de 2013
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" );
networking.rafael 9 de abr. de 2013
Caríssimos colegas,
tive uma evolução, com base no código abaixo :
BigDecimal resultadoTemp = new BigDecimal(entry.getValue().intValue() * 100 / totalQuestionarios);
BigDecimal resultadoFinal = resultadoTemp.setScale(2, BigDecimal.ROUND_UP);
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 ?
entanglement 9 de abr. de 2013
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 );
networking.rafael 9 de abr. de 2013
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 !!!
entanglement 9 de abr. de 2013
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)”