o Double não é exato.
O ideal é usar BigDecimal desde o início, ou seja, "getAPagar" ja deve retornar um BigDecimal.
Quando for dividir um BigDecimal por outro por exemplo, é recomendável usar váaarias casas decimais (aqui eu uso 20).
Quanto ao arredondamento eu uso o HALF_EVEN, que é o tradicional, ou seja 0, 1, 2, 3 ,4 = arredonda pra baixo, 5, 6, 7, 8 e 9, arredonda pra cima
--
_________________________________
Alexandre Silveira Neto
Analista e Desenvolvedor de Sistemas
Voiza - Soluções em Java
2012/4/9 Felipe Aron <felipearon@gmail.com>
Galera, ta acontecendo algo "estranho" comigo. Tenho o seguinte método:public double getPendencia() {double v1 = getAPagar(); == 392.1double v2 = getPago(); == 392.09double pendencia = v1 - v2; == 0.010000000000047748 ???if ((pendencia >= (TOLERANCIA_PENDENCIA * -1))&& (pendencia <= TOLERANCIA_PENDENCIA))pendencia = 0;return pendencia;}O valor correto para "pendencia" não deveria ser os exatos 0,01?Se eu arredondo esse valor usando:BigDecimal(pendencia).setScale(2, BigDecimal.ROUND_UP).doubleValue()Ele me retorna 0,02. Creio que por causa do "BigDecimal.ROUND_UP"Como resolver esse problema da forma correta?--Analista-Programador
_________________________________
Alexandre Silveira Neto
Analista e Desenvolvedor de Sistemas
Voiza - Soluções em Java






0 comentários:
Postar um comentário