Trabalhando com BigDecimal
Aritmética decimal exata
Trabalhando com BigDecimal é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.
Matemática decimal exata
BigDecimal, do pacote java.math, representa números decimais com precisão arbitrária e sem erros de arredondamento ocultos. É a ferramenta padrão para cálculos financeiros.
Criando um BigDecimal
A maneira mais segura de criar um BigDecimal é a partir de um texto. Isso preserva exatamente os algarismos digitados.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal amount = new BigDecimal("42.50");
System.out.println(amount);
}
}Imutabilidade
BigDecimal é imutável. Operações como add não alteram o original; elas retornam um novo BigDecimal. Você deve guardar o valor retornado.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("10");
a.add(new BigDecimal("5"));
System.out.println(a);
}
}Adição e subtração
Use add e subtract, lembrando-se de armazenar o resultado. Cada chamada retorna um novo valor.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal price = new BigDecimal("19.99");
BigDecimal tax = new BigDecimal("1.60");
BigDecimal total = price.add(tax);
System.out.println(total);
}
}Multiplicação
multiply funciona como esperado. Observe que a escala do resultado é a soma das escalas dos operandos.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal unit = new BigDecimal("2.50");
BigDecimal qty = new BigDecimal("3");
System.out.println(unit.multiply(qty));
}
}A divisão exige cuidado
Dividir valores que não resultam em uma divisão exata, como 1 por 3, produz um decimal infinito. Nesse caso, uma chamada simples a divide lança uma ArithmeticException.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal one = new BigDecimal("1");
BigDecimal three = new BigDecimal("3");
try {
System.out.println(one.divide(three));
} catch (ArithmeticException e) {
System.out.println("Need to specify rounding!");
}
}
}Divisão com arredondamento
Forneça uma escala e um RoundingMode para dividir com segurança. Aqui, mantemos duas casas decimais e arredondamos as metades para cima.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal one = new BigDecimal("1");
BigDecimal three = new BigDecimal("3");
System.out.println(one.divide(three, 2, RoundingMode.HALF_UP));
}
}Comparando valores
Use compareTo para comparar valores numéricos. Não use equals, pois equals considera a escala: 2.0 e 2.00 não são iguais por equals, mas são iguais por compareTo.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal a = new BigDecimal("2.0");
BigDecimal b = new BigDecimal("2.00");
System.out.println(a.equals(b));
System.out.println(a.compareTo(b) == 0);
}
}Constantes úteis
BigDecimal oferece constantes prontas: BigDecimal.ZERO, BigDecimal.ONE e BigDecimal.TEN. Use-as em vez de criar as suas próprias.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal sum = BigDecimal.ZERO;
sum = sum.add(BigDecimal.TEN);
System.out.println(sum);
}
}Somando uma lista
Um padrão comum é começar com BigDecimal.ZERO e adicionar cada valor em um laço, guardando o resultado a cada vez.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal[] prices = {
new BigDecimal("1.10"),
new BigDecimal("2.20"),
new BigDecimal("3.30")
};
BigDecimal total = BigDecimal.ZERO;
for (BigDecimal p : prices) {
total = total.add(p);
}
System.out.println(total);
}
}Boas práticas
Lembre-se do essencial: crie valores a partir de textos, trate-os como imutáveis, sempre especifique o arredondamento em divisões e compare com compareTo.
Verificação rápida
Teste seus conhecimentos sobre BigDecimal.
Recapitulação
Você aprendeu a trabalhar com BigDecimal:
- Crie-o a partir de um texto para preservar os algarismos exatos
- Ele é imutável, portanto guarde o resultado de cada operação
- Use diretamente
add,subtractemultiply divideprecisa de uma escala e deRoundingModepara resultados não terminantes- Compare com
compareTo, não comequals
Perguntas Frequentes
A aula “Trabalhando com BigDecimal” é grátis?
Sim — o texto completo de “Trabalhando com BigDecimal” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.
O que vou aprender em “Trabalhando com BigDecimal”?
Aritmética decimal exata Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Java Academy?
Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Trabalhando com BigDecimal”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Java Academy?
Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Por que não usar double para Dinheiro
- Trabalhando com BigDecimal
- Arredondamento e Escala
- BigInteger para Números Enormes