Operações com ponto flutuante

Pessoal,

Preciso realizar operações com ponto flutuante e estava fazendo uns testes com BigDecimal.

Vou evitar de usar double por causa dos problemas já conhecidos e para aferir o grau de sucesso estou tentando fazer a seguinte conta:

1 / 3 * 1 tem que ser igual a 1;

Eu consegui fazer isso com o BigDecimal usando o código abaixo:

BigDecimal bd = new BigDecimal(1).setScale(5);
BigDecimal divisor = new BigDecimal(3).setScale(5);
BigDecimal multiplicador = new BigDecimal(3);
BigDecimal resultadoDivisao = bd.divide(divisor, 5, RoundingMode.UP);
System.out.println(resultadoDivisao);
BigDecimal resultadoMultiplicacao = resultadoDivisao.multiply(multiplicador, new MathContext(5));
System.out.println(resultadoMultiplicacao);

Esse código funcionou mas fiquei preocupado com duas coisas:
1 - O RoundMode.UP: Será que em contas mais complexas esses rounds para cima não podem comprometer o resultado? Tipo sobrando alguns centavos, etc…

  1. os “setScale(5)”. Coloquei isso ali de forma “aleatória”, para resolver um outro erro. O scale é a quantidade de casas decimais? Ou tem alguma outra explicação mais profunda na matemática?

Para resumir: Minha dúvida é saber se usar BigDecimal e dessa forma é a melhor solução para meu problema.

Obrigado.