sergiotaborda:
Sem dúvida. 8)
Mas aqui fica uma forma de resolver seu problema
public String bigDecimalToString(BigDecimal bd){
if (bd.longValue() / db.doubleValue() == 1){
// o numero é inteiro
return Long.toString(bd.longValue());
} else {
return Double.toString(bd.doubleValue());
}
}
Este código so funciona quando bd está no range de long e double mas para numeros pequenos deve funcionar
Pois é… Estou trabalhando com BigDecimal justamente porque double não resolve.
Quando uso com números pequenos esse seu método funciona. Mas quando usei com o BigDecimal “10000000.5” ele imprimiu “1.00000005E7”.
Além disso, quando usei com o BigDecimal:
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999.9999999999999999999
Ele imprimiu “Infinity”!!
Consegui resolver com o seguinte método: (adaptei a dica do ViniGodoy, trocando while(true) por while(n.scale() > 0) para não ficar imprimindo em notação científica )
static BigDecimal trim(BigDecimal n) {
try {
while (n.scale() > 0) {
n = n.setScale(n.scale() - 1);
}
} catch (ArithmeticException e) {
// no more trailing zeroes so exit.
}
return n;
}
Assim funcionou em todos os casos, e se eu passar o meu salário como parâmetro não vai mais imprimir “Infinity” hehehehe…