BigDecimal em Java: como representar números de vírgula flutuante com precisão
Com a classe BigDecimal do Java, é possível lidar com precisão com números de ponto flutuante complexos. Para isso, primeiro é necessário criar esses números e, em seguida, utilizar vários métodos que permitem trabalhar com eles. A sintaxe de cada método geralmente mantém uma estrutura semelhante, o que facilita a utilização da classe após um breve treinamento, mesmo no caso de iniciantes.
O que é BigDecimal em Java?
Em Java, BigDecimal é uma classe que permite representar e processar com grande precisão números de ponto flutuante complexos de tamanho (em teoria) ilimitado. Através de diferentes métodos, é possível implementar com máxima precisão operações de arredondamento, aritmética, conversão de formato, hashing e comparações avançadas.
Java BigDecimal consiste numa escala inteira de 32 bits e um valor inteiro não escalonado com precisão arbitrária. Neste contexto, «escala» refere-se ao número de dígitos após a vírgula decimal, desde que estes sejam maiores ou iguais a zero. Se o valor for menor que zero, ele é multiplicado por “10^(-escala)”. O tamanho máximo da classe é limitado apenas pela memória do computador. No entanto, trata-se de uma limitação principalmente teórica, pois é improvável que um programa crie um número que exceda a memória disponível. Enquanto BigDecimal em Java é destinado exclusivamente a números de vírgula flutuante, BigInteger é usado para números inteiros.
Para que serve a aula?
Embora nem sempre seja necessário recorrer ao Java BigDecimal, há situações e áreas em que essa classe é especialmente valiosa. Por exemplo, ela é usada em cálculos em que até mesmo a posição decimal mais distante pode ter um grande impacto, como nas transações de comércio eletrónico. Também é usada em análises estatísticas precisas. Além disso, há um grande número de programas, como os utilizados no controlo e navegação de aviões ou foguetes, que dependem desta classe. Por sua vez, no âmbito da saúde também se recorre ao Java BigDecimal.
Como se cria um objeto?
Se quiser usar BigDecimal em Java, primeiro deve importar a classe para o programa Java. Depois de fazer isso, pode declarar um objeto dessa classe, atribuir-lhe o valor desejado como argumento e passá-lo para o construtor Java correspondente. Em seguida, pode usar os BigDecimals criados em Java. A seguir, mostramos como importar a classe e declarar dois objetos de exemplo:
/ / Programa de Java para la clase BigDecimal
import java.math.BigDecimal;
public class ejemplo BigDecimal
{
public static void main(String[] args)
{
/ / Crear dos nuevos BigDecimals
BigDecimal ejemplouno =
new BigDecimal ("1275936001.744297361");
BigDecimal ejemplodos =
new BigDecimal ("4746691047.132719503");
}
}javaAgora pode utilizar estes objetos com os métodos da classe que desejar.
Exemplos de BigDecimal em Java
Depois de criar os objetos, são utilizados diferentes métodos para executar operações e poder utilizar os objetos. Através de exemplos simples, apresentamos como esses métodos funcionam e quais resultados você pode obter. Com o comando Java System.out.println() , uma linha de texto é impressa na saída padrão.
Soma de dois BigDecimals
Para somar dois BigDecimals em Java, utiliza-se o método add(). Primeiro, indique os dois valores que deseja somar. No nosso exemplo, o valor «ExemploUm» deve ser somado ao valor «ExemploDois». Isto tem o seguinte aspecto:
EjemploUno =
EjemploUno.add(EjemploDos);
System.out.println ("El resultado después de la suma es: " + EjemploUno);javaSubtrair números
Para subtrair dois valores, é necessário utilizar o método subtract(). No exemplo a seguir, “ExemploDois” é subtraído de “ExemploUm”. O código é o seguinte:
EjemploUno =
EjemploUno.restar(EjemploDos);
System.out.println ("El resultado que buscas después de la resta es: " + EjemploUno);javaMultiplicar valores
O método usado para multiplicar dois BigDecimals em Java é muito semelhante aos de somar ou subtrair. É chamado multiply() e usa como argumento o objeto “multiplicador”. Se quiser multiplicar “ExemploDois” por “ExemploUm”, o código que deve ser usado é:
EjemploUno =
EjemploUno.multiplicar(EjemploDos);
System.out.println ("El resultado después de la multiplicación es: " + EjemploUno);javaDividir números
Para dividir dois BigDecimals em Java, utilize o método divide(). A sintaxe continua sendo muito semelhante à de outros métodos e pode ser apresentada da seguinte forma:
EjemploUno =
EjemploUno.divide(EjemploDos);
System.out.println ("El resultado que buscas después de la división es: " + EjemploUno);javaNo entanto, só será obtido um resultado se este for exato ou se for um número inteiro. Caso contrário, aparecerá a seguinte mensagem de erro: java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result, que descreve um erro em tempo de execução. Para evitar esta mensagem, podem ser aplicadas diferentes opções de arredondamento, que podem ser partilhadas com java.math.RoundingMode. Existem diferentes constantes à escolha:
| Constante | Função |
|---|---|
| CEILING | Arredondamento positivo para o infinito. |
| DOWN | Arredondamento para 0. |
| FLOOR | Arredondamento para o infinito negativo. |
| HALF_DOWN | Arredondamento para o número vizinho seguinte e para o oposto de 0, se ambos estiverem à mesma distância. |
| HALF_EVEN | Arredondamento para o número vizinho seguinte e para o número par seguinte, se ambos estiverem à mesma distância. |
| HALF_UP | Arredondamento para o número vizinho seguinte na direção de 0, desde que ambos estejam à mesma distância. |
| UNNECESSARY | Omite o arredondamento e realiza apenas operações exatas. Só pode ser utilizado se a divisão for exata. |
| UP | Arredondamento a partir de 0. |
Resumo dos métodos mais importantes
Depois de aprender a utilizar BigDecimals em Java, bem como os diferentes métodos associados, apresentamos a seguir alguns dos métodos mais importantes.
| Método | Função |
|---|---|
| abs() | BigDecimal com o valor absoluto deste BigDecimal. |
| add() | Retorna um BigDecimal cujo valor é a soma de (this + Sumando). |
| divide() | O valor da saída é obtido através de (this / Divisor). |
| max(BigDecimal val) | Retorna o valor máximo deste BigDecimal. |
| min(BigDecimal val) | Retorna o valor mínimo deste BigDecimal. |
| movePointLeft(int n) | Retorna um BigDecimal com o ponto decimal deslocado para a esquerda pelo valor “n”. |
| movePointRight(int n) | Retorna um BigDecimal com o ponto decimal deslocado para a direita pelo valor “n”. |
| multiply(BigDecimal multiplicando, MathContext mc) | Retorna um valor que resulta de (this * Multiplicador). |