Duvidas com BigDecimal

1 resposta
marlonfd

Boa tarde Pessoal...

A minha dúvida é o seguinte..... Estou trabalhando com bigdecimal mas estou com problemas de arredondamento. Tenho o seguinte código
public class TesteRoundingMode {
	
	public static void main(String[] args) {
		executaRoundingMode();		
	}

	private static void executaRoundingMode() {
		BigDecimal valor1 = new BigDecimal("8.955");
                BigDecimal valor2 = new BigDecimal(8.955);
                
               //rounding.half_DOWN
		System.out.println("HALF_DOWN: "+valor1.setScale(2,RoundingMode.HALF_DOWN));
		
		System.out.println("HALF_DOWN: "+valor2.setScale(2,RoundingMode.HALF_DOWN));
        }
}

Ao rodar a aplicação tenho a seguinte saída:
HALF_DOWN: 8.95
HALF_DOWN: 8.96

Porque que é que temos essa diferença de 1 centavo, quando usamos as aspas no número??

agradeço a colaboração.

1 Resposta

ricardosoares

a diferença não é bem um centavo.
dê um println antes de arredondar e vc verá.
quando entre aspas, a constrção do obj “parseia” a string corretamente 8.955.
do contrario, o método encara com parametro float cujo o tratamento tem “um certo defeito”.
se vc der um println antes de arredondar, verá algo como 8.9549999986915841 e, nesse caso, o HALF_DOWN joga pra 8.95 mesmo.

Criado 30 de outubro de 2008
Ultima resposta 30 de out. de 2008
Respostas 1
Participantes 2