Porcentagem no bigdecimal

pessoal,

estou tentando dificuldade em fazer uma formula que me retorne 0.5% de um valor …(meio %)

dentro do meu metodo, consta a seguinte linha para verificacao…

if (te.getLiberarr().equalsIgnoreCase("Y")) {
                    if (totalPedido.doubleValue() > te.getValorMaiorQue().doubleValue()) {
                        aux = te.getPorcentagemTotal().divide(new BigDecimal(100)).multiply(totalPedido);

Tentei alterar o valor do BigDecimal para 0.05 mas deu erro …

Alguem tem alguma ideia?

A operação de divisão com BigDecimal é meio chata (para funcionar direito, você precisa especificar a escala e o modo de arredondamento); em vez de dividir por 100, é melhor você multiplicar um número por new BigDecimal (“0.01”). No seu caso, 5% = 0.05

Outra coisinha - para comparar 2 BigDecimal, você deve usar compareTo, não converter para um double e usar “>” ou “<”. Isso “mata” todo o seu trabalho que você teve para ficar com os resultados corretos.

BigDecimal a, b;
...
if (a.compareTo (b) < 0) // equivale a "a < b"

Exemplificando o “entanglement”, se eu entendi direito sua pergunta:

BigDecimal total = new BigDecimal(100);
BigDecimal meioPorcentoDoTotal = total.multiply(new BigDecimal(0.05));
		
System.out.println(meioPorcentoDoTotal);

Aí vc ajusta com as variáveis do seu código.

opa…valeu pela dica…
vou testar e posto o resultado aqui

abracao

nao deu certo, mudei para o codigo abaixo

BigDecimal Total = new BigDecimal(100);   
BigDecimal PorcentagemTotal = Total.multiply(new BigDecimal(0.05));  

Mas o infeliz continua calculando errado :confused:

o primeiro codigo calcula os 1% normal(conforme postei la em cima)),mas para calcular somente 0.5% ta complicado

Você não está mostrando o número errado? 5% de 100 é o valor 5.

Tem um detalhe muito importante: ele É MUITO IMPORTANTE. Ele quebra as pernas de todo mundo que resolve usar BigDecimal e depois reclama que não funciona.

new BigDecimal (0.05) -> NUNCA FAÇA ISSO! 0.05 é um número “impreciso” em notação binária (que é a que o double do Java usa). Portanto, o número resultante será muito estranho.

new BigDecimal (“0.05”) (note que é uma string, não um double) -> Isso é o correto.

1 curtida

entanglement…

coloquei o codigo como abaixo:

aux = te.getPorcentagemTotal().divide(new BigDecimal("0.05")).multiply(totalPedido);

o valor q era em torno de 67,00 foi para 32.000 :smiley: rsss

import java.text.*;
import java.math.*;
import java.util.*;

class TesteBigDecimal4 {
    public static void main(String[] args) throws Exception {
        NumberFormat df = NumberFormat.getCurrencyInstance();
        BigDecimal bd = new BigDecimal ("62.0");
        BigDecimal percent5 = new BigDecimal ("0.05");
        // Aqui imprime "3.100", ou seja, 3.1.
        System.out.println ("5% de 62 = " + bd.multiply(percent5));
        // Aqui imprime "R$ 3,10" que é o que provavelmente você quer. 
        System.out.println ("5% de 62 = " + df.format (bd.multiply (percent5)));
    }
}

Bom dia,

Ao invés de 0.05 , o correto não seria 0.005 , já que ele quer 0.5 %(meio %) do valor e não 5%.

Att,

Tiago