Casas Decimais de um número

3 respostas
Paezani

Olá pessoal, estou com um probleminha e não consigo achar uma solução: Após o sistema efetuar um cálculo entre 2 números informados pelo usuário(validados e td mais), por exemplo: 1200,99 / 2 = 600,495. Eu queria que retornasse pra mim sem arredondamento ou aproximação, no caso, 600,49.
Eu tente usar o DecimalFormat mas ele retorna 600,50.

double n = 1200,99 / 2;
   DecimalFormat df = new DecimalFormat();
   df.applyPattern("###0.00");   // 1900,99
   df.format(n);

Alguém tem uma solução?

3 Respostas

T

Você quer o valor truncado? Faça algumas contas. Cuidado: devido aos problemas de arredondamento, você tem de tomar algum cuidado - se você não for dividir o número por 2, e sim por alguma coisa que não é potência de 2 (por exemplo, 10) você pode ter alguns resultados inesperados de vez em quando.

Conselho: o arredondamento normalmente faz bem à saúde. Mas se você não pode arredondar então você precisa pensar mais um pouco.

Exemplo:

1200.99 / 2 = 600.495
600.495 * 100 = 60049.5
(long) 60049.5 = 60049
60049 / 100 = 600.49
rodpuc

Se vc precisa guardar o valor considerando apenas 2 casas decimais, então precisa de alguma solução como a que o thingol exemplificou. Caso a as 2 casas decimais sejam importantes apenas na hora de imprimir o valor na tela, vc pode usar:

System.out.printf("Valor: %.2f", valor);  //valor é a variável onde está o número q vc quer exibir
Paezani

Bom thingol, seguindo as suas dicas e como os números que dividem o primeiro podem ser diferentes de 2, acho melhor continuar com DecimalFormat… mas valeu pela ajuda…

Rodpuc dessa maneira q vc postou ele retorna igual ao DecimalFormat… por exemplo: 1200,99 / 2 = 600,495, ele imprime 600,50.

Criado 30 de junho de 2009
Ultima resposta 30 de jun. de 2009
Respostas 3
Participantes 3