Boa tarde a todos,
preciso truncar um BigDecimal que possui mais de 2 casas decimais e fixalo com apenas 2 casas após a virgula, por exemplo:
transformar 1.0392089 para 1.04
Alguém pode me ajudar?
Desde já agradeço pelas respostas!
Acabei de usar uma solução em JS
Exemplo:
var num = ‘125.5’;
num = parseFloat(num);
num.toFixed(2);
Resultado: 125.50
Você não quer truncar (ignorar casas decimais), mas sim arredondar (obter o número mais próximo com 2 casas). Tente isso:
BigDecimal arredondado = a_arredondar.round(new MathContext(2));
Vlw pela ajuda galera mas ja resolvi utilizando esta solução aqui, caso alguem se interesse de ver, ai vai:
public BigDecimal formataDecimal(BigDecimal vlrFator){
BigDecimal numFormatado = vlrFator.setScale(2, BigDecimal.ROUND_UP);
return numFormatado;
}
Blz Gabriel!? Cara, implementei a forma que você utilizou para arredondar o seguinte valor: 16,66666666666667. Só que ele informa o seguinte erro:
MathContext mc = new MathContext( (int)Math.min(this.precision() +
(long)Math.ceil(10.0*divisor.precision()/3.0),
Integer.MAX_VALUE),
RoundingMode.UNNECESSARY);
BigDecimal quotient;
try {
quotient = this.divide(divisor, mc);
} catch (ArithmeticException e) {
throw new ArithmeticException("Non-terminating decimal expansion; " + // Linha apontada...
"no exact representable decimal result.");
}
Tente fazer 100/6 para ver se ele arredonda? Até mais!
Consegui resolver, fiz o seguinte:
BigDecimal valorUnitario = campValTotProd.divide(divisor, MathContext.DECIMAL32);
Até mais!