[RESOLVIDO]Math.round

3 respostas
M

estou com um problema no meu código

double z = a+b+c+d+e+f+g+h+i+j+k+l;

double zn = ( Math.round( (z * 100.0) ) ) / 100.0;

de a até l, podem haver quaisquer tipos de números com vírgula, por exemplo:

1,05 ou 4015,25. sempre duas casas depois da vírgula é claro

o problema é que o Math.round nao está arredondando para duas casas depois da vírgula e as vezes acontece o seguinte:

o resultado total fica assim: 25415,600000003

porque acontece isso? e como eu posso arrumar??

obrigado.

3 Respostas

thiago_spdvr
double zn = ( Math.round(z * 100)) / 100;
M

thiago

assim ele sempre irá arredondar para 0 depois da vírgula

eu achei uma classe que faz o que eu quero...

o código é o seguinte:
double z = a+b+c+d+e+f+g+h+i+j+k+l;


       int decimalPlace = 2;
        BigDecimal bd = new BigDecimal(z);
         bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP);
    z = bd.doubleValue();

Obrigado ;)

M

Isso porque o double não garante precisão em operações de divisão (diferentemente do BigDecimal). Mas no caso de usar o BigDecimal há um preço a se pagar: desempenho.

Você realmente precisa do número arredondado? Não bastaria tê-lo formatado? Se esse for o caso, prefira usar DecimalFormat ao invés de BigDecimal.

Criado 20 de janeiro de 2010
Ultima resposta 20 de jan. de 2010
Respostas 3
Participantes 3