Utilizar um valor decimal sem arredondar

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.

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

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

ou

[code] double numero = 249.87543771885808;

	DecimalFormat df = new DecimalFormat("0.00");  
    
	System.out.println(df.format(numero));[/code]

att,

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

.

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.

Tenta esses métodos do DecimalFormat:

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

[quote=luiz_renato]Tenta esses métodos do DecimalFormat:

setMaximumFractionDigits(2); setRoundingMode(RoundingMode.DOWN);[/quote]

boa!!!

att,

Perfeito Luiz! Deu certo. Era isso mesmo.

Obrigada a todos pela ajuda.

Att,

       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?

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

[quote=luiz_renato]Tenta esses métodos do DecimalFormat:

setMaximumFractionDigits(2); setRoundingMode(RoundingMode.DOWN);[/quote]

Use assim, o resto é gambiarra.

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

Melhor forma, sem duvida!