Utilizar um valor decimal sem arredondar

13 respostas
S

Bom dia, pessoal.
Estou com uma dúvida ao utilizar um valor decimal, pois preciso que ele tenha 2 dígitos após a virgula sem arredondar o mesmo.

Exemplo: se o número obtido for 249.87543771885808

Preciso armazenar apenas 249.87 (sem arredondar). Estou utilizando o DecimalFormat, mas ele sempre arrendonda para mais, exemplo 249.88… o que no meu caso, não pode acontecer.

Alguém poderia me ajudar?
Desde já agradeço a colaboração de todos.

13 Respostas

Mephy

toString() + substring()

String s = numero.toString(); s = s.substring(0, 6); // acho que em Java é assim: (start, length), mas posso estar enganado System.out.println(s); // mostra os 6 primeiros caracteres sem nenhuma alteração numérica

S

Será que não tem como “truncar” o valor de numero sem precisar converter para string?

pedruhenrik

ou

double numero = 249.87543771885808;
	    
		DecimalFormat df = new DecimalFormat("0.00");  
	    
		System.out.println(df.format(numero));

att,

S

Oi pedruhenrik, eu fiz isso. Mas, neste caso, ele sempre arredonda para 249.88 e não é isso que quero. Preciso que ele tenha duas casas decimais, mas exatamente igual… ou seja, 249.87

acbit

.

JoaoBluSCBR

Então vc precisa de um Trunc.

public double trunc(double valor, int casas){

    double divisor = Math.pow(10, casas);
    valor = valor * divisor;
    int inteiro = (int) valor
    valor = inteiro/divisor;
    return valor;
}

Mas quando se trata de doubles, nada é garantido, como ele é armazenado na forma
de potências, mesmo uma operação mais simples pode causar alguma casa além do
formato desejado.

Muitos usam float para ter mais segurança ou até criar classes tipo Currency para
formatar em tipo Moeda.

Boa sorte.

luiz_renato

Tenta esses métodos do DecimalFormat:

setMaximumFractionDigits(2); setRoundingMode(RoundingMode.DOWN);

pedruhenrik

luiz_renato:
Tenta esses métodos do DecimalFormat:

setMaximumFractionDigits(2); setRoundingMode(RoundingMode.DOWN);

boa!!!

att,

S

Perfeito Luiz! Deu certo. Era isso mesmo.

Obrigada a todos pela ajuda.

Att,

gpellizzoni
Double f = 123.459945;
        String s = f.toString();
        int i = s.indexOf(".");
        s = s.substring(0, i + 3);
        f = Double.valueOf(s);
        System.out.println(f);

Serve?

W

Poderia tentar multiplicar por 100 e dividir por 100, isso iria fazer com que ficasse apenas com 2 dígitos.

rmendes08

luiz_renato:
Tenta esses métodos do DecimalFormat:

setMaximumFractionDigits(2); setRoundingMode(RoundingMode.DOWN);

Use assim, o resto é gambiarra.

M

setMaximumFractionDigits(2); setRoundingMode(RoundingMode.DOWN);

Melhor forma, sem duvida!

Criado 4 de agosto de 2011
Ultima resposta 15 de ago. de 2011
Respostas 13
Participantes 10