Como fazer BigDecimal Aritmética para Java
A pior parte sobre o uso do BigDecimal classe em Java é que você não pode usar operadores aritméticos normais com BigDecimal objectos. BigDecimal aritmética tem rules.T diferente ele seguinte código, por exemplo, não irá compilar:
BigDecimal subtotal, TaxRate, fiscal,-total subtotal = new BigDecimal ( "32.50") - TaxRate = new BigDecimal ( "0,05") - imposto = subtotal * taxRate- // erro: não vai compiletotal = subtotal + impostos // este não irá compilar quer
Em vez disso, você tem que chamar métodos da BigDecimal classe para efectuar operações aritméticas básicas. Todos esses métodos retornam o resultado do cálculo, BigDecimal objectos. Veja como você pode executar o cálculo do imposto anterior:
BigDecimal subtotal, TaxRate, fiscal,-total subtotal = new BigDecimal ( "32.50") - TaxRate = new BigDecimal ( "0,05") - imposto = subTotal.multiply (TaxRate) -total = subTotal.add (imposto) -
Aqui está uma lista de todos os métodos aritméticos para o BigDecimal classe. Como você pode ver, a classe tem métodos para operações básicas tais como adicionar, subtrair, multiplicar, e dividir, bem como algumas operações adicionais, tais como abs (poder absoluto), prisioneiro de guerra (Aumentando o número a uma potência), e negativo (Altera o sinal do número).
Método | Explicação |
---|---|
BigDecimal abs () | Retorna o valor absoluto deste BigDecimal. |
BigDecimal adicionar | Adiciona o especificado BigDecimal para issoBigDecimal e devolve o resultado. |
BigDecimal divide (BigDecimalval) | divide esta BigDecimal por thespecified BigDecimal e retornos theresult. O método pode lançar ArithmeticException. |
BigDecimal [] divideAndRemainder (BigDecimalval) | divide esta BigDecimal por thespecified BigDecimaeu. O resultado e theremainder são retornados como uma matriz de dois elementos BigDecimal. |
BigDecimal [] divideToIntegralValue (BigDecimalval) | divide esta BigDecimal por thespecified BigDecimal e retorna theinteger resultado. |
BigDecimal max (BigDecimal val) | Retorna o maior desta BigDecimale o especificado BigDecimal. |
BigDecimal min (BigDecimal val) | Retorna o menor deste BigDecimal eo BigDecimal especificado. |
BigDecimal multiplicação (BigDecimalval) | multiplica isso BigDecimal por thespecified BigDecimal e retornos theresult. |
BigDecimal negar () | nega esta BigDecimal eo resultado returnsthe. |
BigDecimal pow (poder int) | eleva este BigDecimal para a powerspecified pela int valor e resultado returnsthe. |
restante BigDecimal (BigDecimalval) | divide esta BigDecimal por thespecified BigDecimal e retorna theremainder. |
BigDecimal subtração (BigDecimalval) | Subtrai o especificado BigDecimaldisto BigDecimal e retornos theresult. |
Observe que, além de divisão normal, você pode usar o divideToIntegralValue método para retornar a parte inteira do resultado. Aqui está um exemplo:
BigDecimal a = new BigDecimal ( "23.5") - BigDecimal b = new BigDecimal ( "7.0") - BigDecimal c-c = a.divideToIntegralValue (b) -
Após estas instruções são executadas, o valor de c é 3.
Você também pode usar o restante método para obter o restante de uma divisão:
C = a.remainder (b) -
Aqui o valor de c é 2.5.
Um erro comum entre os novos usuários do BigDecimal classe é esquecendo-se de atribuir o resultado de uma operação aritmética. Você pode olhar para este ciclo de código por horas, perguntando por que ele não parece funcionar:
BigDecimal totalWinnings = new BigDecimal ( "1000.00") - BigDecimal winningsThisGame = new BigDecimal ( "200.00") - totalWinnings.add (winningsThisGame) -System.out.println (totalWinnings) -
A terceira declaração acrescenta winningsThisGame para totalWinnings mas descarta o resultado. O que você provavelmente quis dizer foi o seguinte:
totalWinnings = totalWinnings.add (winningsThisGame) -