Gostaria da ajuda de alguem pois tenho um valor double assim:
1253,198521315421
Eu gostaria que a formatação não perdesse a precisão assim:
1253,19
Eu pesquisei aqui no forum, já usei NumberFormat, DecimalFormat etc… só que eles me retornaram um valor arrendondado (1253,20). Gostaria de saber como faço pra formatar esse valor sem perder a precisão.
importjava.math.BigDecimal;publicclassBig{publicstaticvoidmain(String[]args){Doubled=1253.198521315421;BigDecimalb=newBigDecimal(d);System.out.println(b.setScale(2,BigDecimal.ROUND_DOWN));// vai imprimir 1253.19}}
[]s
T
thingol
Se você concordar comigo, o valor 1253.20 é uma aproximação melhor para o valor 1253,198521315421 que 1253,19 (ou seja, é um valor mais exato).
A precisão está relacionada com o número de casas (no seu caso 2 casas de precisão depois da vírgula), portanto você com certeza irá perder precisão.
A exatidão está relacionada com a proximidade do valor representado para o valor real, portanto 1253.20 é mais exato que 1253.19.
D
danielvrt
Fala galera, usei o BigDecimal, so que alguns campos ele faz a formatação certa e alguns ele arredonda o valor. O que eu faço? Obriagado.
se vc souber exatamente o nr de decimais q o valor tem, vc pode usar
double valor = 1234.123456789012; // 12 decimais
DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(12);
System.out.println(df.format(valor)); // 1.234,[telefone removido]
thimor
Passei por um problema de arredondamento quando estava pagando uma discliplina onde tinhamos que resolver problemas da maratona de programacao. O problema problematico foi o “The Trip”.
A solucao para o arredondamento eh vc trabalhar com inteiro. 1253,19 vc multiplica por 100 ou por 1000. faz suas operacoes e o resultado voce divide pelo fator que multiplicou. entendeu?