Formatação de numeros [RESOLVIDO]

10 respostas
josimarsis

Boa tarde Galera é o seguinte gostaria de saber se tem alguma maneira utilizando o DecimalFormat ou o NumberFormtat pra resolver a seguinte situação eu tenho os seguintes valores em bigDecimal:

1.000
1.35
1.555
1000.55

gostaria que estes respectivos valores fossem convertidos para:

1
1,35
1,555
1.000,55

Gostaria tbm de saber como marcar um post como resolvido!

Grato

10 Respostas

A

Boa tarde,

Sofri para conseguir fazer isso. Mais deu certo. Única coisa, é que não interpreta virgula...no caso desomar os valores....Tem que ser ponto.
<script language="javascript"> 
  
  
  function moeda(campo, e){   
  
    var SeparadorDecimal = "."
	var SeparadorMilesimo = ""
	var sep = 0;
	var key = '';
	var i = j = 0;
	var len = len2 = 0;
	var strCheck = '[telefone removido]';
	var aux = aux2 = '';
	var whichCode = (window.Event) ? e.which : e.keyCode;
	
	    if (whichCode == 13) return true;
		          key = String.fromCharCode(whichCode); // Valor para o código da Chave
		     if (strCheck.indexOf(key) == -1) 
		return true; // Chave inválida   
		         len = campo.value.length;
		for(i = 0; i < len; i++)
				   if ((campo.value.charAt(i) != '0') && (campo.value.charAt(i) != SeparadorDecimal)) break;
				      aux = '';
	    for(; i < len; i++)
					   if (strCheck.indexOf(campo.value.charAt(i))!=-1) aux += campo.value.charAt(i);
					             aux += key;   len = aux.length;   if (len == 0) campo.value = '';
						     if (len == 1) campo.value = '0'+ SeparadorDecimal + '0' + aux;
							    if (len == 2) campo.value = '0'+ SeparadorDecimal + aux; 
								  if (len > 2) {
								             aux2 = '';
										for (j = 0, i = len - 3; i >= 0; i--) {
										     if (j == 3) {
											        aux2 += SeparadorMilesimo; j = 0; }
													aux2 += aux.charAt(i);
													j++; }
													campo.value = '';
													len2 = aux2.length;
										for (i = len2 - 1; i >= 0; i--)
										            campo.value += aux2.charAt(i);
													campo.value += SeparadorDecimal + aux.substr(len - 2, len);}
										    return false;}
josimarsis

Não existe uma maneira mais exuta em java?

R

se vc estiver usando o java 5(1.5) use o método format da classe String.
Ex: String.format(formatodonúmero,númeroaserformatado).

Espero ter ajudado

g4j

Não conseguiu com Decimal format?

Tente com:

DecimalFormat df = new DecimalFormat("###,###.###");
Metaleiro

[color=darkblue]Dá uma olhada nesses links, acho que podem ter as respostas que deseja, sei que são coisas diferentes, mas acredito que o caminho seja : [/color]

NumberFormat nf = NumberFormat.getInstance(Locale.CHINESE); 

nf.format(123.45);

converter um float numa string

Onde fazer conversões? no model, no view ou no controler?

R

usa o DecimalFormat ou o NumberFormat

josimarsis

Galera acho que não me expressei bem. É o seguinte eu tenho um campo quantidade que no banco é decimal 10,3 dai não queria mostar para o usuario 1.000 queria mostar as casas decimias somente quando elas não fossem zeradas. Sendo assim:
1.000 seria 1
1.550 seria 1,55
1.458 seria 1,458
1000.53 seria 1.000,53

g4j

josimarsis:
Galera acho que não me expressei bem. É o seguinte eu tenho um campo quantidade que no banco é decimal 10,3 dai não queria mostar para o usuario 1.000 queria mostar as casas decimias somente quando elas não fossem zeradas. Sendo assim:
1.000 seria 1
1.550 seria 1,55
1.458 seria 1,458
1000.53 seria 1.000,53

Não conseguiu com Decimal format?

Tente com:

DecimalFormat df = new DecimalFormat("###,###.###");

???

josimarsis

Galera deu certo eis aqui o método:

public static String Convert(BigDecimal valor) { DecimalFormat df = null; if (valor.scale() == 2) { df = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(new Locale("pt", "BR"))); df.setParseBigDecimal(true); // aqui o pulo do gato df.setRoundingMode(RoundingMode.DOWN); df.setMaximumFractionDigits(3); }else{ df = new DecimalFormat("###,###.###"); } return df.format(valor); }

Muito Obrigado! Como marcar meu post como resolvido?

CrOnNoS
Um exemplo de "forma enxuta":
public static void main(String[] args) {

		BigDecimal numero = new BigDecimal(1000.55);
		System.out.println(numero);
		System.out.println("\"Forma enxuta\":");
		System.out.printf("%,.2f", numero.floatValue());

	}

Onde o "," após o "%" indica que é para ser usado vírgula ao invés de ponto como separador.

Para colocar um topic como resolvido Edite o primeiro post seu adicionando [RESOLVIDO] antes do título do mesmo

PS: Lembrando que se você quiser salvar aquele valor em uma outra variável ao invés de imprimir, você poderia usar String.format

Criado 19 de novembro de 2009
Ultima resposta 19 de nov. de 2009
Respostas 10
Participantes 7