Formatar Campo Preço Independente do Locale?

11 respostas
fsfnit

Pessoal, como formato um campo de preço independente do Locale do SO e que a quantidade de casas decimais (pós virgula) seja passada por parametro ?
Eu fiz esse método, porém estou com problemas com locale.

Pois no meu método testo se tem “,” e coloco 0 na frente, ou atrás quando o campo perde o foco.

Alguem tem alguma susgestão ?

11 Respostas

ivela

Olá!

Já tentou expressões regulares?

gomesrod

Como é que você está fazendo essa formatação?
Se estiver usando NumberFormat e outras classes da API do Java você pode “forçar” um Locale fixo, e também consegue passar a quantidade de casas decimais.

thiago.correa

Dá uma olhada nesse tópico
http://www.guj.com.br/posts/preList/119040/699886.java#699886

fsfnit

Estou fazendo assim:

[code]

public static String formatValue (String numero, int digits) {
String nmbr2;
Double nmbr;
// numero = numero.replace( ".", "" );
// numero = numero.replace( ",", "" );
// numero = numero.trim();

nmbr = Double.parseDouble(numero);

NumberFormat nmbrFrmt = NumberFormat.getNumberInstance(Locale.getDefault());
nmbrFrmt .setMinimumFractionDigits(digits);
nmbr2= nf.format(nmbr );
return nmbr2;
}
Este método é chamado no FocusLost do comoponente TEXT do SWT. Mas ainda não está como deveria.
Pois se o campo ja possui valor ele me dá erro, ele não consegue formatar um campo que ja foi formatado, ou seja, as vírguças ou pontos não podem passar por esse método.
Mas se eu retirar os "." e "," vai acabar somando.
Exemplo:
1) Campo vazio, digito o valor 12, ele vai retornar ao campo 12,00 (Pois o método tem atributo digits, que é qtde de digitos depois da vírgula).
2) Caso eu saia do campo (que já está com o valor 12,00) ele da erro, ou caso eu implemente a retirada do "." e da "," ele vai ler 1200, e vai retornar 1200,00.

Alguma ideia ?

thiago.correa

É meio mão na roda mas, funciona

String a = "1.322,3"; NumberFormat df = DecimalFormat.getInstance(); Number n = df.parse(a); System.out.println(df.format(n));

fsfnit

thiago.correa:
É meio mão na roda mas, funciona

String a = "1.322,3"; NumberFormat df = DecimalFormat.getInstance(); Number n = df.parse(a); System.out.println(df.format(n));

Infelizmente não funcionou, a saída é o mesmo numero: 1.322,3

thiago.correa

Então, é para ele formatar um texto já formatado, assim você não tem erro, não era isso que você queria?!
Bom, tu já tá com a faca e o queijo, isso vai ajudar o teu CVC *

  • Coeficiente de viração própria
    Boa sorte :wink:
fsfnit

Resolvi assim:

NumberFormat numberFormatter = NumberFormat.getInstance(); numberFormatter.setGroupingUsed(false);//Padrão true numberFormatter.setMinimumIntegerDigits(1);//Padrão 1 numberFormatter.setMinimumFractionDigits(digits); //Padrão 2 numberFormatter.setMaximumFractionDigits(digits); // Padrão 4

sauron_fight

Tenho alguns campos String, mais precisava fazer alguns cálculos, então fiz uma parseDouble e deu certo.
Mais se eu utilizar a formatação DecimalFormat f = new DecimalFormat(",##0.00");
nao estou conseguindo passar para Double alguem pode me ajudar?

No exemplo abaixo como formato Number para Double?

Neste exemplo : String a = 1.322,3;

NumberFormat df = DecimalFormat.getInstance();

Number n = df.parse(a);

System.out.println(df.format(n));
M

Basta fazer um cast de Number para Double:

String a = "1.322,3";
NumberFormat df = DecimalFormat.getInstance();
Number n = df.parse(a);
Double d = (Double) n;
System.out.println(d);
System.out.println(d.getClass());
sauron_fight

O amigo muito obrigado! Deu tudo certo!

Criado 6 de julho de 2009
Ultima resposta 8 de jul. de 2010
Respostas 11
Participantes 6