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 “>” “=”
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");
}
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 …
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.
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]
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.