Formatar valor?

4 respostas
T

Olá pessoal.

Procurei aqui no site sobre como formatar valores com 2 casas decimais. Até consegui, utilizando o bigDecimal, mas ele arredonda o valor e eu queria apenas eliminar os valores a partir da 3ª casa.
Tentei utilizar o DecimalFormat, mas não sei o que estou fazendo de errado, pois não elimina:

Exemplo: pmt = 129,50268422

formato = new DecimalFormat("0.00");
formato.format(pmt);

System.out.println(pmt.toString());

4 Respostas

marcosharbs

sua máscara está definida errada, tente isso:

formato = new DecimalFormat("¤ ###,###,##0.00");   
formato.format(pmt);

vlww!

jwalker

Boa tarde… a solução para seu problema é esta:

int numeroDeCasas = 3;
        BigDecimal pmt= new BigDecimal(129.50268422);
        pmt= pmt.movePointRight(numeroDeCasas);
        pmt= pmt.setScale(0,RoundingMode.DOWN);
        pmt= pmt.movePointLeft(numeroDeCasas);
        System.out.println(pmt.toString());

Desta maneira ele não arredonda :slight_smile:

Seria isso ?

Abraços!

leo_mf

Encontrei uma maneira de formatar um valor double sem arredondar, pq se vc mandar nao arredondar, uma exception é lançada. Então criei um código para formatar sem arredondar o valor. Talvez tenha uma maneira mais prática.

double valor = 129.50968422;
        String pattern = "0.00";
        DecimalFormat formato = new DecimalFormat(pattern);
        String valorFormatado = Double.toString(valor);
		// Aqui pega o numero do index depois de, no maximo, duas casas a partir do ponto.
		int index = ((valorFormatado.length()-(valorFormatado.indexOf(".")+1))-2);
		index = valorFormatado.length()-(index<0?0:index);		
		
		// Aqui garante que o valor vai ter duas casas decimais. Independente se for zero ou nao.
		valorFormatado =  valorFormatado.substring(0, index);
		valorFormatado = valorFormatado.indexOf(".")== valorFormatado.length()-2?valorFormatado+"0":valorFormatado;		
		
		

        System.out.println(valorFormatado);
jwalker
leo_mf:
Encontrei uma maneira de formatar um valor double sem arredondar, pq se vc mandar nao arredondar, uma exception é lançada. Então criei um código para formatar sem arredondar o valor. Talvez tenha uma maneira mais prática.
double valor = 129.50968422;
        String pattern = "0.00";
        DecimalFormat formato = new DecimalFormat(pattern);
        String valorFormatado = Double.toString(valor);
		// Aqui pega o numero do index depois de, no maximo, duas casas a partir do ponto.
		int index = ((valorFormatado.length()-(valorFormatado.indexOf(".")+1))-2);
		index = valorFormatado.length()-(index<0?0:index);		
		
		// Aqui garante que o valor vai ter duas casas decimais. Independente se for zero ou nao.
		valorFormatado =  valorFormatado.substring(0, index);
		valorFormatado = valorFormatado.indexOf(".")== valorFormatado.length()-2?valorFormatado+"0":valorFormatado;		
		
		

        System.out.println(valorFormatado);

Critica construtiva.... quando trabalhar com números....use só as funções deles para trabalhar seu valor.

Abraços!

Criado 5 de novembro de 2008
Ultima resposta 5 de nov. de 2008
Respostas 4
Participantes 4