DecimalFormat

6 respostas
carioca

Como faço para que um valor double seja arredondado somente para
0 ou 5.

Ex…

1,3954 == 1,40

1,2415 == 1,25

1,2251 == 1,20

6 Respostas

lalgarve

Tenta isto:

double valorArrendondado = Math.round(d * 20)/20.0;

Explicando melhor. Para duas casas decimais:

  • multipliquei por 100;
  • dividi por 5;
  • arredondei;
  • multipliquei por 5;
  • dividi por 100.

Foi daí que eu tirei o número 20 (100/5) 8)

carioca

Não entendi muito bem sua colocação. Sera que vc poderia explicar melhor.

richardpeder

tenta pegar essa classe como exemplo…nao sei se ela vai rodar, mas veja como uso o deicmalformat

<import do DecimalFormat, não lmebro...> :oops: 
public class Teste
{
     private double db1,db2;
     private DecimalFormat decimal;

     
     public Teste()
     {
         db1 = 0;
         db2 = 0;
         decimal = new DecimalFormat("0.00");
     }

private void atribinum(double pdb1,pdb2)
{
      db1 = pdb1;
      db2 = pdb2;
}

private double divisao()
{
   return db1/db2;
}

public static void main(String args[])
{
     Teste teste = new Teste();
     teste.atribuiNum(1.2,0.5);
     System.out.println("Numero formatado: "+decimal.format(divisao());
}
}

No caso, quando vc imprime o metodo divisao(), ali vc poderia estar colocando o numero que deseja formatar…a classe foi apenas uma ideia ok?!

ate mais…

carioca

Desculpe mais acho que vcs não entenderam muito bem o que eu quero fazer.

É que eu quero é que o sistema não de valores quebrados tipo

R$ 1,26

R$ 2,33

R$ 1,79

Eu quero que ele arredonte para final 5 ou 0.
Tirando aqueles acima como exemplo, quero que me retorne

R$ 1,25

R$ 2,35

R$ 1,80

Será que alguem tem alguma idéia???

bandrade

faz na ‘mão’ mesmo…

testa se a parte decimal tá perto de 0 ou 5, arredonda e pront… ehehehe
mas claroque na api deve ter algo do tipo… tenta propurar na api jva, classe Integer… de ter lá.

lalgarve

Minha colocação é bem simples. Se o número termina em 0 ou 5, ele é múltiplo de cinco.

Começamos com : 1,3954

Como você quer com duas casas decimais, multipliquei por 100: 139,54

Eu tenho agora que achar um número que seja múltiplo de 5 o mais próximo possível de 139. Então eu dividi o número por 5 e encontrei: 27,908.

Agora eu quero o número inteiro mais próximo de 27,908, isto é, basta você usar o Math.round!!! e encontrar 28. Qualquer número inteiro multiplicado por 5 termina em 0 ou 5.

Agora eu faço tudo ao inverso, multiplico por 5 e acho 140.

Divido por 100 e acho 1,40.

Você pode simplificar ao verificar que multiplicar por 100 e dividir por 5 é a mesma coisa que multiplicar por 20. E que multiplicar por 5 e dividir por 100 é a mesma coisa que dividir por 20.

Eu sei que a formula Math.round(d*20)/20.0 parece simples demais para ser verdade, mas funciona. O que pode acontecer é vc encontrar algo do tipo 1,3999999999999999999999999 (o double nem sempre dá o resultado exato mas sempre é muito próximo), neste caso vc pode usar a classe DecimalFormat. Creio que eu postei aqui no GUJ como arredondar um número com duas casas decimais utilizando esta classe.

Criado 10 de abril de 2003
Ultima resposta 11 de abr. de 2003
Respostas 6
Participantes 4