- 1 1. O que é o Tipo double do Java?
- 2 1.1 double É “Ponto Flutuante de Precisão Dupla”
- 3 1.2 Uma Imagem Prática do que o double Pode Representar
- 4 1.3 No Java, Literais Decimais Padrão São double
- 5 1.4 Situações Comuns Onde o double É Usado
- 6 1.5 Pontos Chave a Lembrar Primeiro
- 7 2. Faixa e Precisão do double (Um Guia para Dígitos Significativos)
- 8 2.1 A Faixa Numérica que o double Pode Representar
- 9 2.2 Dígitos Significativos São Aproximadamente 15 a 17 Dígitos
- 10 2.3 “Alta Precisão” Não Significa “Decimais Exatos”
- 11 2.4 Por Que os Dígitos Significativos Importam
- 12 2.5 Compreensão Correta Baseada em Alcance e Precisão
- 13 3. Diferenças Entre double e float (Qual Você Deve Usar?)
- 14 3.1 As Diferenças Básicas Entre float e double
- 15 3.2 Por Que double É o Padrão em Java
- 16 3.3 Quando Você Deve Usar float
- 17 3.4 Uma Regra Simples para Iniciantes
- 18 3.5 Por que Entender Essa Diferença Importa
- 19 4. Uso Básico de double (Declaração, Cálculo, Saída)
- 20 4.1 Declarando e Atribuindo um double
- 21 4.2 As Quatro Operações Aritméticas Básicas
- 22 4.3 Um Aviso Importante com Divisão
- 23 4.4 Imprimindo Resultados de Cálculo
- 24 4.5 Imprimindo com um Número Fixo de Dígitos
- 25 4.6 Resumo dos Conceitos Básicos de Cálculo com double
- 26 5. Armadilha Comum #1: Por que Ocorrrem Erros de Precisão
- 27 5.1 Um Exemplo Clássico de Erro de Precisão
- 28 5.2 Por que Esse Tipo de Erro Ocorre
- 29 5.3 Sempre Presuma que Erros Podem Acontecer
- 30 5.4 Quando os Erros Geralmente Não Importam
- 31 5.5 Como Você Deve Lidar com Erros de Precisão
- 32 6. Armadilha Comum #2: Usar “==” para Comparar Valores double é Perigoso
- 33 6.1 O Que Acontece Quando Você Usa “==”
- 34 6.2 A Regra de Ouro para Comparar Valores double
- 35 6.3 Comparando com um Epsilon (Tolerância)
- 36 6.4 Como Escolher um Epsilon?
- 37 6.5 Como Isso Difere do BigDecimal
- 38 6.6 Resumo das Regras de Comparação
- 39 7. Armadilha Comum #3: Divisão Inteira Produz Zero
- 40 7.1 Por Que a Divisão Inteira Acontece
- 41 7.2 Como Realizar a Divisão Decimal Corretamente
- 42 7.3 Um Erro Comum no Mundo Real
- 43 7.4 Regras que Iniciantes Devem Lembrar
- 44 7.5 Resumo da Armadilha da Divisão Inteira
- 45 8. Convertendo Entre Strings e double (Mais Comum na Prática)
- 46 8.1 Convertendo uma String para double
- 47 8.2 Diferença Entre Double.valueOf()
- 48 8.3 Convertendo double para String
- 49 8.4 Sempre Formate Strings para Exibição
- 50 8.5 Pontos Chave para Conversão de String
- 51 9. Valores Especiais na Classe Double (NaN / Infinity)
- 52 9.1 O Que É NaN (Not a Number)?
- 53 9.2 O que é Infinity?
- 54 9.3 Como Verificar NaN e Infinity
- 55 9.4 Por que a Detecção Precoce Import
- 56 10. Use BigDecimal para Dinheiro e Cálculos Exatos
- 57 10.1 O que é BigDecimal?
- 58 10.2 Regra Importante ao Usar BigDecimal
- 59 10.3 Escolhendo entre double e BigDecimal
- 60 11. Resumo: Usando Java double Corretamente
- 61 12. Perguntas Frequentes (FAQ)
1. O que é o Tipo double do Java?
O tipo double do Java é um tipo de dados fundamental para trabalhar com valores decimais. Ao contrário de int ou long, que representam inteiros, double é usado para representar números com ponto decimal como “1.5”, “3.14” ou “0.01”. É um dos tipos mais frequentemente usados ao realizar cálculos numéricos em Java.
Como os iniciantes frequentemente tropeçam aqui no início, é importante primeiro entender que tipo de características o double possui.
1.1 double É “Ponto Flutuante de Precisão Dupla”
double é um número de ponto flutuante de precisão dupla que representa valores usando 64 bits (8 bytes).
Como o termo “ponto flutuante” sugere, o double lida internamente com valores numéricos como aproximações.
Como resultado, ele possui as seguintes características:
- Pode lidar com uma faixa extremamente ampla de valores
- Pode realizar cálculos envolvendo partes fracionárias
- No entanto, não pode representar todos os valores decimais de forma exata
O fato de que ele “não pode representar todos os decimais de forma exata” é explicado em detalhes mais adiante, mas ter em mente que o double não é onipotente torna o resto muito mais fácil de entender.
1.2 Uma Imagem Prática do que o double Pode Representar
A faixa de valores que um double pode representar é extremamente grande. De forma aproximada, ele pode lidar com:
- Números muito pequenos (ex.: 0.0000000001)
- Números muito grandes (na ordem de 10^300)
- Números decimais típicos do dia a dia
Por exemplo, todos os seguintes valores podem ser armazenados em um double:
double a = 3.14;
double b = 0.1;
double c = 123456789.987;
Para cálculos como processamento numérico do dia a dia, quantidades físicas, dados estatísticos e computações de coordenadas — onde “aproximadamente correto é bom o suficiente” — o double é comumente usado como a escolha padrão.
1.3 No Java, Literais Decimais Padrão São double
No Java, quando você escreve um literal numérico com ponto decimal, ele é tratado como um double por padrão, a menos que você especifique o contrário.
double x = 1.23; // OK
float y = 1.23; // コンパイルエラー
No exemplo acima, float y = 1.23; falha porque 1.23 é interpretado como um double.
Se você quiser que seja tratado como um float, deve especificá-lo explicitamente assim:
float y = 1.23f;
Esse comportamento mostra que, no Java, o double é o padrão para cálculos decimais.
1.4 Situações Comuns Onde o double É Usado
O double é comumente usado em situações como as seguintes:
- Quando você quer o resultado de uma divisão como um decimal
- Cálculos como médias e razões
- Renderização de gráficos e computações de coordenadas
- Computação científica e processamento estatístico
Por outro lado, ele não é adequado para cálculos monetários ou processamento decimal estrito.
Isso é explicado em detalhes mais adiante como parte de como escolher entre double e BigDecimal.
1.5 Pontos Chave a Lembrar Primeiro
Para resumir o que você aprendeu até agora de forma amigável para iniciantes:
doubleé o tipo básico para números decimais- Internamente, os cálculos usam valores aproximados
- No Java, literais decimais padrão são
double - Você deve ter cuidado quando a precisão importa
2. Faixa e Precisão do double (Um Guia para Dígitos Significativos)
Ao aprender o tipo double, um tópico inevitável é a questão de “quão precisamente ele pode representar números?”
Nesta seção, você aprenderá a faixa numérica, a precisão e a ideia de dígitos significativos para o double de forma amigável para iniciantes.
2.1 A Faixa Numérica que o double Pode Representar
Como o double usa 64 bits para representar valores, ele pode lidar com uma faixa extremamente ampla de números.
Conceitualmente, a faixa parece assim:
- Números muito pequenos: ex.: até cerca de
4.9 × 10^-324 - Números muito grandes: ex.: até cerca de
1.8 × 10^308
Na programação cotidiana, você raramente precisa pensar nesses limites. Para a maioria dos propósitos práticos, pode considerá‑lo como lidar com uma faixa quase “praticamente infinita”.
2.2 Dígitos Significativos São Aproximadamente 15 a 17 Dígitos
O conceito chave para entender a precisão de double são os dígitos significativos.
Diz‑se frequentemente que um double pode armazenar cerca de 15 a 17 dígitos com precisão.
Por exemplo, considere os valores a seguir:
double a = 123456789012345.0;
double b = 1234567890123456.0;
a(15 dígitos) pode ser representado com precisãob(16+ dígitos) pode ter dígitos inferiores arredondados
Em outras palavras, à medida que o número de dígitos aumenta, a precisão detalhada é gradualmente perdida.
2.3 “Alta Precisão” Não Significa “Decimais Exatos”
Aqui está um mal‑entendido comum entre iniciantes.
double tem alta precisão
→ então pode lidar com decimais exatamente
Isso não é sempre correto.
double é de fato um tipo de alta precisão, mas isso significa:
“pode ser preciso como uma aproximação até certo número de dígitos”
em vez de “todo valor decimal é exato.”
Por exemplo, considere este cálculo:
double x = 0.1 + 0.2;
System.out.println(x);
Muitas pessoas esperam 0.3, mas na realidade você pode ver algo como:
0.30000000000000004
Isso não é um bug. É como o double funciona.
O motivo é que 0.1 e 0.2 não podem ser representados exatamente em binário.
2.4 Por Que os Dígitos Significativos Importam
Se você não entender os dígitos significativos, pode encontrar problemas como:
- Resultados ligeiramente incorretos
- Comparações com
==não correspondendo - Erros acumulando em somas ou médias
Todos esses surgem do fato de que double é um tipo que lida com valores aproximados.
Por outro lado, em áreas onde “igualdade perfeita” importa menos que “precisão realista”, como:
- Renderização de gráficos
- Simulações físicas
- Processamento estatístico
double é uma escolha excelente.
2.5 Compreensão Correta Baseada em Alcance e Precisão
Para resumir:
doublepode representar uma faixa extremamente ampla de valores- Possui cerca de 15–17 dígitos significativos
- Decimais são tratados como aproximações
- Tenha cuidado quando for necessária precisão estrita
3. Diferenças Entre double e float (Qual Você Deve Usar?)
Ao trabalhar com decimais em Java, double e float são quase sempre comparados.
Ambos podem representar valores fracionários, mas há diferenças importantes em precisão, casos de uso e praticidade.
Nesta seção, focamos em critérios de decisão claros para que iniciantes não fiquem presos.
3.1 As Diferenças Básicas Entre float e double
Vamos manter a comparação simples:
| Type | Bits | Typical Precision | Main Use |
|---|---|---|---|
| float | 32-bit | About 6–7 digits | Lightweight / lower precision |
| double | 64-bit | About 15–17 digits | Standard / higher precision |
Como pode ver, double oferece uma precisão drasticamente maior.
3.2 Por Que double É o Padrão em Java
Em Java, literais decimais (como 1.23) são tratados como double por padrão.
Isso ocorre principalmente porque:
- Em CPUs modernas, o custo de desempenho do
doublecostuma ser insignificante - Bugs causados por precisão insuficiente tendem a ser mais graves
doubleé melhor para legibilidade e segurança no código típico
Portanto, em Java, a abordagem comum é: usar double a menos que você tenha um motivo forte para não usá‑lo.
3.3 Quando Você Deve Usar float
Então, float é inútil?
Não—ele pode ser eficaz dependendo do contexto.
Situações típicas onde float é escolhido incluem:
- Quando você precisa minimizar o uso de memória de forma extrema
- Ao lidar com grandes arrays numéricos (por exemplo, processamento de imagens)
- Ao priorizar velocidade em detrimento da precisão em jogos ou cálculos 3D
Entretanto, para aplicações de negócios ou web,
raramente há um motivo forte para usar float.
3.4 Uma Regra Simples para Iniciantes
Se você não tem certeza de qual usar, lembre‑se desta regra:
- Em caso de dúvida, use
double - Use
floatsomente quando as restrições de memória/desempenho forem rigorosas
Especialmente ao aprender, geralmente é mais eficiente evitar problemas de precisão específicos de float e construir a compreensão com double.
3.5 Por que Entender Essa Diferença Importa
Saber a diferença ajuda em situações como:
- Entender a intenção ao ler o código de outra pessoa
- Prevenir perda desnecessária de precisão
- Evitar bugs de cálculo numérico antes que ocorram
4. Uso Básico de double (Declaração, Cálculo, Saída)
Agora vamos confirmar o uso básico de double com código real.
Se você entender o fluxo de “declarar → calcular → exibir”, terá os fundamentos cobertos.
4.1 Declarando e Atribuindo um double
Você declara um double da mesma forma que outros tipos primitivos:
double x = 1.5;
double y = 2.0;
Ao atribuir valores decimais, não é necessário nenhum sufixo especial.
Você também pode atribuir um valor inteiro; ele será convertido automaticamente para double.
double a = 10; // Treated as 10.0
4.2 As Quatro Operações Aritméticas Básicas
Com double, você pode usar diretamente adição, subtração, multiplicação e divisão:
double a = 5.0;
double b = 2.0;
double sum = a + b; // addition
double diff = a - b; // subtraction
double product = a * b; // multiplication
double quotient = a / b; // division
Todos os resultados também são double, então você pode lidar naturalmente com resultados decimais.
4.3 Um Aviso Importante com Divisão
O ponto chave é que a divisão se torna um cálculo decimal apenas se ao menos um dos operandos for um double.
double result1 = 1 / 2; // result is 0.0
double result2 = 1 / 2.0; // result is 0.5
1 / 2 usa inteiros em ambos os lados, portanto realiza divisão inteira primeiro.
Para evitar isso, faça uma das seguintes opções:
- Torne um operando um
double - Use um cast explícito
double result = (double) 1 / 2;
4.4 Imprimindo Resultados de Cálculo
Você pode imprimir um valor double diretamente usando System.out.println():
double value = 3.14159;
System.out.println(value);
Entretanto, imprimir assim pode mostrar mais dígitos do que você deseja.
4.5 Imprimindo com um Número Fixo de Dígitos
Se quiser uma saída mais limpa, printf é conveniente:
double value = 3.14159;
System.out.printf("%.2f%n", value);
Isso imprime o valor com duas casas decimais.
%.2f: 2 dígitos após o ponto decimal%n: quebra de linha
Para exibições voltadas ao usuário, recomenda‑se sempre controlar o número de dígitos exibidos.
4.6 Resumo dos Conceitos Básicos de Cálculo com double
Principais pontos deste seção:
doublesuporta cálculos decimais naturalmente- Tenha cuidado com divisão entre inteiros
- Controle os dígitos exibidos ao imprimir resultados
5. Armadilha Comum #1: Por que Ocorrrem Erros de Precisão
Uma das primeiras experiências confusas ao usar double é:
“o resultado não corresponde ao que eu esperava.”
Isso não é um bug do Java. É uma propriedade intrínseca do tipo double.
5.1 Um Exemplo Clássico de Erro de Precisão
Vamos observar um exemplo bem conhecido:
double x = 0.1 + 0.2;
System.out.println(x);
Muitas pessoas esperam 0.3, mas você pode realmente ver:
0.30000000000000004
Ao ver isso, você pode pensar “algo está errado” ou “é um bug?”
Mas esse é o resultado correto para double.
5.2 Por que Esse Tipo de Erro Ocorre
A razão é que double representa números usando binário.
Humanos usam base‑10, mas os computadores internamente usam base‑2.
O problema principal é:
- Muitos decimais em base‑10 não podem ser representados com um número finito de dígitos binários
- Portanto o sistema armazena a aproximação mais próxima
0.1 e 0.2 não terminam em binário, então são armazenados como valores que são “muito próximos”, mas não idênticos aos valores decimais exatos.
Somar essas aproximações produz um resultado como 0.30000000000000004.
5.3 Sempre Presuma que Erros Podem Acontecer
A mentalidade mais importante é:
Com double, erros de precisão são inevitáveis
Os erros tornam‑se especialmente perceptíveis em casos como:
- Repetir adições/subtrações muitas vezes
- Cálculos que envolvem divisão
- Quando você precisa de correção estrita até muitas casas decimais
Em resumo, double não foi projetado para “decimais perfeitamente exatos”.
5.4 Quando os Erros Geralmente Não Importam
Por outro lado, há muitos casos em que erros de precisão são raramente um problema prático.
Por exemplo:
- Gráficos e animação
- Valores de sensores e dados estatísticos
- Computação científica
- Jogos e simulações
Nesses campos, o que importa mais do que a igualdade exata é ser capaz de computar com precisão realista.
É aí que o double se destaca.
5.5 Como Você Deve Lidar com Erros de Precisão
Tentar eliminar os erros completamente costuma quebrar seu design.
Em vez disso, siga estes princípios:
- Aceite que erros “podem acontecer”
- Use métodos adequados de comparação/julgamento
- Use abordagens diferentes quando erros não são aceitáveis
6. Armadilha Comum #2: Usar “==” para Comparar Valores double é Perigoso
Depois de entender os erros de precisão, o próximo problema que quase todo mundo encontra é:
“Por que a comparação não funciona como esperado?”
Um erro muito comum entre iniciantes é comparar valores double usando ==.
6.1 O Que Acontece Quando Você Usa “==”
Considere o código a seguir:
double a = 0.1 + 0.2;
double b = 0.3;
System.out.println(a == b);
Intuitivamente, você pode esperar true, mas o resultado pode ser false.
Isso é causado pelo erro de precisão explicado anteriormente.
aestá próximo de0.30000000000000004bé uma aproximação diferente que representa0.3
Porque esses valores não são idênticos ao nível de bits, == os relata como diferentes.
6.2 A Regra de Ouro para Comparar Valores double
Existe uma regra fundamental que você deve sempre lembrar:
Nunca compare valores double para igualdade exata
O operador == verifica se as representações internas são exatamente as mesmas, não se os valores são “suficientemente próximos”.
Isso o torna inadequado para números de ponto flutuante.

6.3 Comparando com um Epsilon (Tolerância)
Ao comparar valores double, você deve definir um limiar para
“quão próximo é suficientemente próximo.”
Esse limiar é chamado de epsilon (tolerância).
double a = 0.1 + 0.2;
double b = 0.3;
double epsilon = 1e-9;
if (Math.abs(a - b) < epsilon) {
System.out.println("Approximately equal");
}
Essa abordagem verifica se:
- A diferença absoluta é suficientemente pequena
- Os valores podem ser considerados iguais para fins práticos
6.4 Como Escolher um Epsilon?
Uma pergunta comum entre iniciantes é:
“Quão grande deve ser o epsilon?”
A ideia é simples. Baseie-se em:
- A escala dos valores que você está manipulando
- A quantidade de erro que você pode tolerar
Regras práticas típicas incluem:
1e-9: seguro para muitos cálculos gerais1e-12: muito estrito1e-6: adequado para exibição ou estimativas aproximadas
Não há um único valor correto.
Escolha com base no seu caso de uso.
6.5 Como Isso Difere do BigDecimal
Olhando um pouco adiante, note a diferença de filosofia:
double: funciona tolerando pequenos errosBigDecimal: design que não permite erro
Se a comparação parece “muito complicada”, pode ser um sinal de que double não é a escolha certa para essa tarefa.
6.6 Resumo das Regras de Comparação
- Não use
== - Compare usando diferenças absolutas
- Escolha epsilon com base no contexto
- Use outros tipos se for necessária precisão estrita
7. Armadilha Comum #3: Divisão Inteira Produz Zero
Mesmo ao usar double, você pode ver resultados inesperadamente se tornarem 0.
Esse é um dos erros mais comuns entre iniciantes.
A causa é simples: o cálculo é realizado usando inteiros.
7.1 Por Que a Divisão Inteira Acontece
Em Java, os tipos dos operandos determinam como um cálculo é realizado.
Considere este código:
double result = 1 / 2;
System.out.println(result);
A saída é:
0.0
Porque tanto 1 quanto 2 são int, Java realiza divisão inteira primeiro, produzindo 0, que é então convertido para double.
7.2 Como Realizar a Divisão Decimal Corretamente
Evitar a divisão inteira é fácil.
Torne pelo menos um operando um double.
double result1 = 1 / 2.0;
double result2 = 1.0 / 2;
double result3 = (double) 1 / 2;
Todos estes produzem:
0.5
7.3 Um Erro Comum no Mundo Real
Esse tipo de código é frequentemente visto em aplicações reais:
int total = 5;
int count = 2;
double average = total / count;
Embora pareça correto, o resultado é 2.0.
A forma correta de calcular a média é:
double average = (double) total / count;
7.4 Regras que Iniciantes Devem Lembrar
- Sempre preste atenção aos tipos na divisão
- Inteiro ÷ inteiro produz um inteiro
- Receber o resultado como
doublenão é suficiente
7.5 Resumo da Armadilha da Divisão Inteira
- A causa são os tipos dos operandos e a ordem de avaliação
- Use
doubledesde o início do cálculo - Seja especialmente cuidadoso com médias e proporções
8. Convertendo Entre Strings e double (Mais Comum na Prática)
Em aplicações do mundo real, você raramente codifica valores double diretamente.
Muito mais frequentemente, você precisa converter strings (String) para números.
Exemplos típicos incluem:
- Valores de entrada de formulários
- Arquivos CSV ou JSON
- Arquivos de configuração
- Respostas de API
Esta seção explica maneiras seguras de converter entre String e double.
8.1 Convertendo uma String para double
8.1.1 Double.parseDouble()
O método mais comum e básico:
String text = "3.14";
double value = Double.parseDouble(text);
Se a string for um número válido, a conversão tem sucesso.
8.1.2 Lidando com Strings Inválidas
Se a string não for numérica, uma exceção é lançada:
String text = "abc";
double value = Double.parseDouble(text); // throws exception
Isso lança uma NumberFormatException.
Na prática, sempre use try-catch:
try {
double value = Double.parseDouble(text);
} catch (NumberFormatException e) {
// error handling
}
8.2 Diferença Entre Double.valueOf()
Double.valueOf() é outro método para converter uma string em um valor numérico.
Double value = Double.valueOf("3.14");
A diferença entre os dois métodos é:
parseDouble→ retorna umdoubleprimitivovalueOf→ retorna um objeto wrapperDouble
Para cálculos numéricos normais, parseDouble é suficiente.
Ao trabalhar com coleções como List<Double>, valueOf é comumente usado.
8.3 Convertendo double para String
Converter um double para uma string também é muito comum.
double value = 3.14;
String text = String.valueOf(value);
Outra opção amplamente usada é:
String text = Double.toString(value);
Ambas as abordagens são seguras. Escolha com base no estilo ou convenções do projeto.
8.4 Sempre Formate Strings para Exibição
Ao mostrar números para os usuários,
sempre use saída formatada.
double value = 3.14159;
String text = String.format("%.2f", value);
Isso formata o valor com duas casas decimais.
8.5 Pontos Chave para Conversão de String
- Sempre espere entrada inválida e lide com exceções
- Separe cálculos internos da formatação de exibição
- Sempre controle o número de casas decimais ao exibir valores
A próxima seção explica valores especiais de double: NaN e Infinity.
Sem entendê-los, a depuração de problemas numéricos se torna muito difícil.
9. Valores Especiais na Classe Double (NaN / Infinity)
O tipo double inclui valores especiais que não são números comuns.
Entendê-los é essencial para programas robustos.
9.1 O Que É NaN (Not a Number)?
NaN representa um resultado numérico indefinido.
Ele ocorre em cálculos como:
double value = 0.0 / 0.0;
System.out.println(value);
A saída é:
NaN
9.2 O que é Infinity?
Quando o resultado de uma divisão transborda, o Java produz Infinity.
double value = 1.0 / 0.0;
System.out.println(value);
A saída é:
Infinity
Se o numerador for negativo, o resultado será -Infinity.
9.3 Como Verificar NaN e Infinity
Esses valores não podem ser verificados de forma confiável usando ==.
Sempre use os métodos dedicados:
double value = 0.0 / 0.0;
if (Double.isNaN(value)) {
System.out.println("Value is NaN");
}
if (Double.isInfinite(value)) {
System.out.println("Value is infinite");
}
9.4 Por que a Detecção Precoce Import
Se NaN ou Infinity se propagarem pelos cálculos, podem causar:
- Todos os resultados subsequentes se tornarem NaN
- Valores inválidosidos na UI
- Lógica da aplicação quebrada
Detecte valores anômalos o mais cedo possível.
10. Use BigDecimal para Dinheiro e Cálculos Exatos
Como mostrado até agora, double é muito conveniente,
mas não pode evitar completamente erros de precisão.
Portanto, não é adequado para:
- Cálculos monetários
- Gerenciamento de pontos ou saldo
- Requisitos de arredondamento estritos
10.1 O que é BigDecimal?
BigDecimal é uma classe que lida com números decimais exatamente em base 10.
Foi projetada para evitar perda de precisão.
BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
BigDecimal result = a.add(b);
System.out.println(result); // 0.3
10.2 Regra Importante ao Usar BigDecimal
Criar um BigDecimal diretamente a partir de um double transfere os erros de precisão.
new BigDecimal(0.1); // Not recommended
Sempre crie a partir de uma string em vez disso:
new BigDecimal("0.1"); // Correct
10.3 Escolhendo entre double e BigDecimal
- Desempenho e simplicidade →
double - Precisão acima de tudo →
BigDecimal
Não force tudo em um único tipo.
Escolha com base no propósito.
11. Resumo: Usando Java double Corretamente
Vamos resumir os pontos principais deste artigo:
doubleé o tipo decimal fundamental do Java- Erros de precisão fazem parte da especificação
- Use tolerâncias para comparação
- Cuidado com divisão inteira
- Use
BigDecimalpara cálculos exatos
Uma vez que você entenda como o double funciona,
a programação numérica se torna muito menos intimidadora.
12. Perguntas Frequentes (FAQ)
Q1. Quantos dígitos são precisos em um double Java?
Cerca de 15–17 dígitos significativos. Valores decimais são tratados como aproximações.
Q2. Devo usar double ou float?
Na maioria dos casos, use double a menos que tenha um motivo forte para escolher float.
Q3. É ruim usar double para dinheiro?
Sim. Não é recomendado. Use BigDecimal para cálculos monetários seguros.
Q4. Posso usar “==” para comparar valores double?
Não. Use uma tolerância (epsilon) em vez disso.
Q5. Como devo lidar com NaN e Infinity?
Use Double.isNaN() e Double.isInfinite() para detectá-los cedo e tratá-los explicitamente

