conversão númerica

Existe alguma classe que converta uma String que representa um numero no formato brasileiro para outra String no formato americano (que possa ser feito parse)?
Ex:

  1. pegue 2.000,388 e converta para 2000.388
  2. pegue 20.00,28 e diga que tem erro
  3. pegue 2000,82 e converte para 2000.82

e assim por diante…

Ou alguem sabe como implementar essas mascaras nos inputText do jsf, existe algum converter para isso?

valeu!

String txt = "200,50";
txt = txt.replaceAll(",",".");

:slight_smile:

Abraços.

tah, mas eu quero que de erro se o cara digitar “20.00,92”, se eu colocar isso vai converter para “20.00.92”

public static String validaNumero(String num) {
		String msg = "erro!";

		if (!(num.indexOf(".") > -1 && num.indexOf(",") > -1)) {
			msg = num.replaceAll(",", ".");
		}
		return msg;
	}

Certim??
Abraços… :slight_smile:

Olá luBS,

Se você quer converter um número no formato brasileiro para o americano apenas para fazer a conversão, não precisa, você pode fazer a conversão direto no número.

Pra isso, você não vai usar o Double.parseDouble (que só converte números num formato quase igual ao americano), e sim, um NumberFormat:

public double converter(String s) throws ParseException { NumberFormat fmt = new DecimalFormat("#,##0.00"); // new DecimalFormat("#,##0.00", new DecimalFormatSymbols(new Locale("pt", "BR")); return fmt.parse(s).doubleValue(); }

Use esse código se o Locale padrão da máquina que for rodar esse código for do Brasil. Caso contrário, use a linha de baixo, que explicita que o Locale deve ser pt_BR.

Até mais,

  • fabiozoroastro, valeu pela ajuda, mas ainda da erro no seu codigo, tenta 1.911,98.

  • CD1, obrigado tb, eu ja tinha achado essa classe (uso para converter no formato para mostrar na tela, quando eu sei que o número esta certo, ou seja, fazer o inverso), problema que ela não valida esse tipo de coisa “1.9.1.1,98”, ele me retorna 1911,98 e eu não queria deixar digitar essas “bizarrices”, de qualquer forma valeu mesmo.

Bem, deixa para la, eu queria saber se existia algo ja pronto para isso, mas enquanto não acho vou usando o que criei aqui mesmo, ficou complicadinho, bizarro, feio, xunxado, mas acho que funciona hehe

  public String conv(String number)
  {
      if (number == null) return null;
      String[] string = number.replace(".", "#").split("#");  //sim, não consegui fazer aplit com o ".", e não sei qual o pattern para fazer hehe
      boolean first = true;
      boolean last = false;
      if (string.length > 1)
      {
         for (String str : string)
         {
            if (last) return "";

            int tam = str.length();
            int virg = str.indexOf(",");
            if (virg >= 0)
            {
               tam = str.substring(0, virg).length();
               if (str.lastIndexOf(",") != virg) return "";
               last = true;
            }

            if ((first) && (tam > 3) || ((tam < 1)))
            {
               return "";
            }
            else if ((!first) && (tam != 3))
            {
               return "";
            }
            first = false;
         }
      }

      try
      {
         // retorna um numero com decimais caso tenha sido informado e o decimal não for 0
         int ix = number.indexOf(",");
         if ((ix > 0) && (Integer.parseInt(number.substring(ix + 1)) != 0))
            return Double.valueOf(number.replace(".", "").replace(",", ".")).toString();
         else
            return ix > 0 ? Long.valueOf(number.substring(0, ix).replace(".", "")).toString() : Long.valueOf(number.replace(".", "")).toString();
      }
      catch (NumberFormatException e)
      {
         return "";
      }
  }

i Lubs,
eu tentei esse numero que você passou e não ocorreu nenhum erro não.

minhaFuncao("1.911,98");
//retornou "erro"

[quote=“fabiozoroastro”]i Lubs,
eu tentei esse numero que você passou e não ocorreu nenhum erro não.

minhaFuncao("1.911,98"); //retornou "erro" [/quote]

Ai que tah, e qual o problema de digitar “1.911,98”? não tem erro
teria se fosse 19.11,98 :wink:

mesmo assim valeu :razz:

se vc dispensar o erro vc pode fazer assim

replaceAll(".","");
replaceAll(",",".");