Arredondamento valores Java

Estou usando em um sistema um arredondamento de valores com BigDecimal. Sei que se eu usar:

double pulso = 19.0;
int normal = 3200;
BigDecimal bdPulso = new BigDecimal(pulso);
BigDecimal bdConstante = new BigDecimal(0.308);
BigDecimal bdFator = new BigDecimal(nominal / 800);
bdPulso = bdPulso.multiply(bdConstante);
BigDecimal ml_corante = bdFator.multiply(bdPulso);

O Valor de ml_corante será 23.407999999999999696242980462557170540094375610351562500, certo? Eu quero apenas três casas decimais depois da virgula, logo:

System.out.println(ml_corante.setScale(3,RoundingMode.HALF_EVEN));
//imprime 23.408

O problema é que o valor a ser obtido deve ser igual a 23.410, sendo assim devo arredondar as duas ultimas casas decimais. Minha pergunta e como fazer isso sem ter que analisar separadamente os ultimos caracteres, pois em um método com mais de 200000 registros o sistema vai “penar” um pouco kkkkkk.

Alguma ideia?

Qual é a regra para o valor pretendido? Arredondar para duas casas decimais e colocar um 0 no fim?

1 curtida

Velho, tente usar a Classe DecimalFormat, voce vai conseguir

Bom dia senhores,

Olhando alguns valores, inicialmente pensei que o sistema do terceiro, arredondava as casas decimais do final para o inicio uma por uma, mas reparei que em alguns valores isso não acontece ou não teria lógica. Enfim, creio que de alguma fora o sistema que vem esta apresentando o valor errado ou tem algum acréscimo, que no caso deverei ver com eles.

Obrigado a todos pela contribuição.

Obs.: Jonas_B_a_r_r_o_s, usei também decimal format e ele não batia, por isso tentei usar o BigDecimal que foca em valores mais precisos, justamente por algumas imprecisṍes do decimal format. Obrigado pela contribuição.

DecimalFormat seria suficiente