[Resolvido] Arredondamento de valores do tipo double

5 respostas
marcos3

Pessoal, estou implementando uma algoritmo que deve ler de um arquivo de texto 15000 valores medidos, em seguida devo calcular os erros absoluto, relativo e por fim encontrar o melhor erro.

A questão é que estou trabalhando com arraylist para armazenar os valores obtidos do arquivo, aí no momento de adicioná-los, os converto para double.

Preciso trabalhar com apenas três casas decimais (no arquivo os valores já estão dessa forma), porém após aplicar as fórmulas estão sendo gerados valores com várias casas decimais. É possível arredondar esses valores?

Exemplo: Er= 0,008329750 <---- resultado obtido, valor desejado -----> Er=0,008

Ou seria melhor trabalhar com valores BigDecimal?

5 Respostas

A

marcos@marcos:
Pessoal, estou implementando uma algoritmo que deve ler de um arquivo de texto 15000 valores medidos, em seguida devo calcular os erros absoluto, relativo e por fim encontrar o melhor erro.

A questão é que estou trabalhando com arraylist para armazenar os valores obtidos do arquivo, aí no momento de adicioná-los, os converto para double.

Preciso trabalhar com apenas três casas decimais (no arquivo os valores já estão dessa forma), porém após aplicar as fórmulas estão sendo gerados valores com várias casas decimais. É possível arredondar esses valores?

Exemplo: Er= 0,008329750 <---- resultado obtido, valor desejado -----> Er=0,008

Ou seria melhor trabalhar com valores BigDecimal?

Pesquise sobre Decimalformat, acredito que é a maneira mais simples.

Só por curiosidade, eu trabalho com metrologia em que tipo de projeto esta trabalhando ou é apenas exercícios?

marcos3

Artur, o arredondamento seria para que a partir da primeira fórmula os valores já fossem arredondados para os próximos cálculos, e não apenas formatá-los para exibição.

Pelo que já li, e até mesmo as poucas vezes que utilizei, o DecimalFormat vai apenas formatar os valores para serem exibidos, não?!

Trata-se de um trabalho para a faculdade.

A

Talvez ajude !!!

public static void main(String[] args){
    double er = 0.008329750;
    //Com BigDecimal       
    System.out.println(new BigDecimal(er).setScale(3, RoundingMode.HALF_DOWN));
    //Com DecimalFormat
    DecimalFormat df = new DecimalFormat("#.");          
    df.setMaximumFractionDigits(3);
    df.setRoundingMode(RoundingMode.HALF_DOWN);
    System.out.println(df.format(er));        
}
marcos3

Gente valeu pelas dicas.

Acabei utilizando o decimalformat mesmo no final, bem na hora de exibir o resultado. Formatei para as 03 casas decimais que precisava.

Obrigado.

A

marcos@marcos:
Gente valeu pelas dicas.

Acabei utilizando o decimalformat mesmo no final, bem na hora de exibir o resultado. Formatei para as 03 casas decimais que precisava.

Obrigado.

Que bom que foi resolvido.

Só uma observação, como te falei trabalho com metrologia, e levando isso em conta, não teria sentido você formatar os numeros no primeiro calculo, já que podemos pensar em casas decimais como precisão então quanto mais casas decimais você trabalhar melhor será sua precisão nos calculos, ai no final você formata da maneira que quiser, sem ter influênciado no resultado final.

Criado 17 de agosto de 2013
Ultima resposta 18 de ago. de 2013
Respostas 5
Participantes 3