Eu estava trabalhando com números recentemente e tive uma situação em que eu quero definir a precisão de um valor duplo, digamos 6 dígitos ou 4 dígitos, dependendo do valor armazenado na base de dados.
Por exemplo, se no banco de dados a precisão é definida como 4 dígitos, então a saída deve parecer como,
10.0000
.
Eu tentei com DecimalFormat' e utilizando a string
##.####', mas é irritante utilizar símbolos todas as vezes.
Há alguma abordagem melhor, diga algo como abaixo:
Double value = 10.0;
value.setPrecision(4);
Você pode't definir a precisão de um duplo (ou Duplo) para um número especificado de dígitos decimais, porque os valores de vírgula flutuante não't têm dígitos decimais. Eles têm dígitos binários.
Você terá que converter em um radix decimal, seja via BigDecimal' ou
DecimalFormat', dependendo do que você quer fazer com o valor mais tarde.
Veja também a minha resposta a esta pergunta para uma refutação das inevitáveis *100/100 respostas.
A precisão do double
e do float
é fixada pelo seu tamanho e pela forma como os tipos de ponto flutuante IEEE são implementados.
O número de dígitos decimais na saída, por outro lado, é uma questão de formatação. Você está certo de que digitar a mesma constante uma e outra vez é uma má idéia. Você deve declarar uma constante de string em seu lugar, e usar sua representação simbólica.
private static final String DBL_FMT = "##.####";
O uso de uma representação simbólica permitiria mudar a precisão em todos os lugares em que a constante é usada sem procurar através do seu código.
Para expandir no @EJP, o conceito de 'precisão' quando se lida com duplas é extremamente carregado. Como discutido em https://stackoverflow.com/a/3730040/390153 você pode't sequer representar 0.1 como duplo independentemente da precisão, pela mesma razão você pode't representar 1/3 na base 10 com precisão finita.
Você precisa considerar o problema que você está tentando resolver, e considerar:
a) Devo usar duplos em primeiro lugar; se a precisão é um conceito relevante, então usar duplos pode muito bem ser um erro.
b) Se as duplas são apropriadas, o que quero dizer com precisão? Se você está falando apenas de display, envolva a lógica em uma função de display e você só precisará lidar com ela em um único lugar; ou seja, aplique o princípio DRY.