Comparando valores do tipo Big Decimal

Ola galera estou com um problema …

Tenho um campo que recebe valores do tipo Big Decimal

e preciso fazer uma comparação que por sinal parece bem simples mas ainda nao compreendi a sintaxe

a comparação é a Seguinte preciso verificar se o valor que vai vim no campo é maior ou igual a 99.999.999,99 , mas nao sei
como se faz com o tipo Big Decimal até pq ele nao Aceita os caracteres “>” “=”

algm sabe como posso fazer?


if(dadosConformeInstrucao.getTxValAposVencimento().getText())>=(new BigDecimal(99.999.999,99))){
                
            }

o que o

dadosConformeInstrucao.getTxValAposVencimento()

retorna?

segue um exemplo…

BigDecimal a = new BigDecimal(1);
BigDecimal b = 	new BigDecimal(99999999.99);
		
if(a.doubleValue() >= b.doubleValue()){
      System.out.println("a eh maior que b");
}else{
      System.out.println("b eh maior que a");
}
1 curtida
 if(new BigDecimal(dadosConformeInstrucao.getTxValAposVencimento().getText()).compareTo(new BigDecimal(99.999.999,99)) >=0){  
    // é maior                  
  }  

Axo que ainda nao ficou muito claro pois denislima vc converte o valor eu queria fazer a comparação entre tipos Big Decimal mesmo sem converter e pmlm sua comparação nao funciona aki ja tentei desse geito…
mas obrigado aguardo mais sugestoes …

ve isso te ajuda…

BigDecimal a = new BigDecimal(1);
BigDecimal b = 	new BigDecimal(99999999.99);

if(a.compareTo(b) >= 0){
	System.out.println("a eh maior que b");
}else{
	System.out.println("b eh maior que a");
}

nao sei mto bem como o compareTo() do BigDecimal trabalha, mas pelo que eu testei aqui ele satisfez corretamente a condição.

fallows

é CompareTo mesmo velho… aí vc compara o resultado que é um int com >=< 0…

^^

Às vezes tenho a sensação de que sou invisível… :?

ahuahuas

Se foi pra mim nao foi a intenção.

Sorry.

Você é invisivel :stuck_out_tongue:

so pra constar, o compareTo tem 3 retornos possiveis, -1, 0 e 1
quando for -1 o numero é menor, 0 representa igualdade e 1 representa que é maior

detalhe muito importante, o BigDecimal tem uma precisa digamos “perfeita” ou seja, 123.120000000000001 é maior que 123.1200000000000 sempre verifique as escalas antes de comparar.

[quote]
"so pra constar, o compareTo tem 3 retornos possiveis, -1, 0 e 1
quando for -1 o numero é menor, 0 representa igualdade e 1 representa que é maior
"[/quote]

Vlw era disso que eu precisava !!!

1 curtida

Ou seja, se vc quiser comparar precisão, terá que usar equals:

    [code]
    BigDecimal a = new BigDecimal(99999999.9);
    BigDecimal b = new BigDecimal(99999999.99);

    if (a.equals(b)) {
        System.out.println("iguais no critério de igualdade e escala");
    } else {
        System.out.println("diferentes em igualdade e/ou escala");
    }
}[/code]

(Repare na casa decimal)…
E neste caso, o resultado seria: diferentes em igualdade e/ou escala.

Seria legal também comentarem que é muito melhor usar

final BigDecimal valor = new BigDecimal("0.1");

do que

final BigDecimal valor = new BigDecimal(0.1);

A JVM, como todos sabem, trabalha com valores binários e, se enrola na hora de converter certos valores double para binários, pois os mesmos não teriam dízima periódica em binário.

Se eu não me fiz entender bem, leiam o artigo Arredondamento no Java: do double ao BigDecimal que explica bem o problema utilizando exemplos.

BigDecimal.compareTo(BigDecimal) retorna um int.

BigDecimal numero = new BigDecimal("4.00");
BigDecimal numero2 = new BigDecimal("5.00");		
int i = numero.compareTo(numero2);		
System.out.println(i);

Rode este código, observe a saída, mude os valores e observe a saida de novo.

Não há motivo pra usar equals, nem converter pra double, nem qualquer outro método de comparação.