Arredondamento e Escala
Controle a precisão e os modos de arredondamento
Arredondamento e Escala é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 3 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.
Escala e precisão
Cada BigDecimal tem uma escala, que corresponde ao número de algarismos à direita da vírgula decimal. O valor 12.340 tem escala 3. Controlar a escala permite apresentar valores monetários com exatamente duas casas decimais.
Inspecionando a escala
Chame scale() para ver quantas casas decimais um valor contém e precision() para ver o número total de algarismos significativos.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("12.340");
System.out.println(v.scale());
System.out.println(v.precision());
}
}setScale para corrigir casas decimais
setScale força um valor a ter uma quantidade escolhida de casas decimais. Você deve passar um RoundingMode se for necessário arredondar.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("12.3456");
System.out.println(v.setScale(2, RoundingMode.HALF_UP));
}
}Arredondamento de metade para cima, o modo comum
RoundingMode.HALF_UP arredonda para o número mais próximo, e os casos de empate são arredondados para longe de zero. Esse é o arredondamento do dia a dia que as pessoas aprendem na escola.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
System.out.println(new BigDecimal("2.5").setScale(0, RoundingMode.HALF_UP));
System.out.println(new BigDecimal("3.5").setScale(0, RoundingMode.HALF_UP));
}
}Arredondamento de metade para o par, o arredondamento bancário
HALF_EVEN arredonda os casos de empate em direção ao algarismo par mais próximo. Isso reduz o viés ao longo de muitos arredondamentos, razão pela qual os bancos preferem esse modo.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
System.out.println(new BigDecimal("2.5").setScale(0, RoundingMode.HALF_EVEN));
System.out.println(new BigDecimal("3.5").setScale(0, RoundingMode.HALF_EVEN));
}
}CEILING e FLOOR
CEILING sempre arredonda em direção ao infinito positivo, enquanto FLOOR sempre arredonda em direção ao infinito negativo, independentemente do algarismo descartado.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("2.1");
System.out.println(v.setScale(0, RoundingMode.CEILING));
System.out.println(v.setScale(0, RoundingMode.FLOOR));
}
}DOWN e UP
DOWN trunca em direção a zero, enquanto UP sempre arredonda para longe de zero. DOWN é um truncamento simples.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("2.9");
System.out.println(v.setScale(0, RoundingMode.DOWN));
System.out.println(v.setScale(0, RoundingMode.UP));
}
}Arredondamento durante a divisão
Uma divisão pode produzir casas decimais infinitas, portanto você fornece a escala e o modo de arredondamento diretamente na chamada a divide.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal bill = new BigDecimal("100.00");
BigDecimal people = new BigDecimal("3");
System.out.println(bill.divide(people, 2, RoundingMode.HALF_UP));
}
}Removendo zeros à direita
stripTrailingZeros remove zeros extras. Combine-o com toPlainString para evitar a notação científica na saída.
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal v = new BigDecimal("12.300");
System.out.println(v.stripTrailingZeros().toPlainString());
}
}Formatando dinheiro
Para exibição, defina a escala como 2 com HALF_UP, para que os preços sempre mostrem duas casas decimais, mesmo quando forem valores inteiros.
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal amount = new BigDecimal("7");
System.out.println(amount.setScale(2, RoundingMode.HALF_UP));
}
}Escolhendo um modo
Escolha HALF_UP para o arredondamento comum voltado ao usuário e HALF_EVEN na contabilidade, para reduzir o viés acumulado. Sempre especifique um modo para que seu código nunca lance uma exceção em resultados não terminantes.
Verificação rápida
Teste seus conhecimentos sobre escala e arredondamento.
Recapitulação
Você aprendeu a controlar a precisão:
- Escala é o número de algarismos depois da vírgula decimal
setScalecorrige as casas decimais e exige umRoundingModeHALF_UPé o arredondamento comum, eHALF_EVENé o arredondamento bancárioCEILING,FLOOR,UPeDOWNabrangem os arredondamentos direcionais- Sempre especifique um modo para divisões, a fim de evitar exceções
Perguntas Frequentes
A aula “Arredondamento e Escala” é grátis?
Sim — o texto completo de “Arredondamento e Escala” é 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 “Arredondamento e Escala”?
Controle a precisão e os modos de arredondamento 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 3 de 4.
Quanto tempo leva a aula “Arredondamento e Escala”?
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