[Resolvido] Como vocês tratam as vírgulas?

Gente,

alguem ja deve ter passado por isso:

pede para a pessoa digitar um numero real (double) e a pessoa usa “,” (virgula) ao inves do padrão do java, “.” (ponto)… Como vocês lidam com isso?
Claro, tem o try e o catch lá… Quando entra no catch eu coloquei uma msg para a pessoa usar “ponto” … Como vocês lidam com isso?
Alguem ai ja deve ter um algoritmozinho pronto pra alterar “,” para “.” no software né??

Se ninguem tiver, ou não quiser compartilhar (Bláááhhh… ),
eu mesmo criarei e postarei aqui depois…

**Detalhe, pesquisei aqui no forum sobre isso,
nao achei nada parecido, posso até ter procurado mal…
hehehe

abraços

Use nomeDaVariavel.replace(’,’, ‘.’); isso dentro de catch.
É claro, se o erro encontrado for de ‘,’ ao invés de ‘.’.

[quote=WendersonLP]Use nomeDaVariavel.replace(’,’, ‘.’); isso dentro de catch.
É claro, se o erro encontrado for de ‘,’ ao invés de ‘.’.[/quote]

coloco isso dentro do try, antes de fazer a conversão, melhor né ?

obrigado pela ajuda,
é muito simples…
nossa passei vergonha
abraços

Oi,

Use NumberFormatException

Da uma olhadinha aqui…http://www.geeksbr.com/2011/01/normal-0-21-false-false-false-pt-br-x.html

Exemplo…

[code]

import java.io.*;
class P27
{
public static void main(String args[])
{
String s;
double n1,np2,np3,rq, nac,nab;
DataInputStream d;
try
{
System.out.println(“digite um numero real”);
d=new DataInputStream(System.in);
s=d.readLine();
n1=Double.parseDouble(s);
nac=Math.ceil(n1);
nab=Math.floor(n1);
np2=Math.pow(n1,2);
np3=Math.pow(n1,3);
rq=Math.sqrt(n1);
System.out.println("o numero digitado foi: "+n1);
System.out.println("o numero arredondado para cima e: "+nac);
System.out.println("o numero arredondado para baixo e: "+nab);
System.out.println("o numero elevado a 2 e: "+np2);
System.out.println("o numero elevado a 3 e: "+np3);
System.out.println("a raiz quadrada desse numero e: "+rq);

	}
	 catch(IOException e)
 	     { 
 	          System.out.println("erro na entrada de dados ");
 	     }
 	
 		 catch(NumberFormatException e)
 	     {
 		      System.out.println("erro de conversão");// aqui pode mudar a mensagem,pedindo um numero real ex(1.88)
         } 
 }

} [/code]

Eu sei “tratar erros” Anime e agradeço a ajuda… Como você não entendeu o que eu quis dizer (provavelmente eu expliquei mal), vou te contar meu EX problema ta?

Tinha um formulario para a pessoa digitar um numero real …
ai eu recebia o resultado em um double mais ou menos assim:

double num = Double.parseDouble(DigiteAqui.getText() );

ai, Se a pessoa digitasse “,70” por exemplo, como eu tratei o erro né, ele caia dentro do catch …

Ai usando o método replace que nosso amigo ai disse,
eu pude fazer o seguinte:

String r = DigiteAqui.getText();
r = r.replace(',','.');
double num = Double.parseDouble(r);

aí ele parou de entrar no catch por causa de “virgula”… só se o cara digitar um char msmo tipo ‘a’, ‘b’, ‘c’ :smiley:

abraços,
obrigado pela tentativa de ajuda…
O que vale é a vontade :wink:

Que bom rsrs… :wink:

Desculpe… :oops:

Não use replace. Se o usuário digitar um valor maior que 999 você terá problemas.

Use DecimalFormat para converter uma String para Número
http://download.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html

O NumberFormat é uma ótima opção.
Dentro de um try

uai,

não entendi,

por que terei problemas se ele digitar algo maior que 999 ?

abraços

se ele digitar 1.000,35, após passar o replace você terá 1.000.35 que causará uma exception quando você tentar converter para Double

Porque tem também o ponto, por exemplo;

Um milhão e trezentos mil. E ciquenta e cinco décimos
1.300.000,55 --> tem dois pontos e uma vírgula, ficar tratando isso é uma merda, se usar o DecimalFormat, fica muito mais fácil, além de que, se depois você mudar de idéia por algum motivo e quiser que o mesmo número tenha o formato das calculadoras (pelo menos a minha é assim):
1’300’000.55 é só trocar a máscara do DecimalFormat, o resto nem precisa mudar :smiley:

[edit]Post acima na frente por apenas 14 segundos O_O … nem tinha visto quando submeti[/edit]

Gente,

uma vez uma prof de matematica me disse que era incorreto usar ponto para separar as casas (1.000,00), que isso era so para facilitar a leitura… kkkkkkkk Fiquei com isso na cabeça… por isso nem lembrava disso hehehe… mas aqui, o software que to fazendo é para dono de bar, buteco… E eu estou pedindo o valor que a pessoa deu para eu retornar o troco para ele… Acho que o replace da conta do recado…

Mas mesmo assim,
vou estudar o NumberFormat, por que provavelmente vou precisar dele no futuro…

obrigado

E o NumberFormat também formata a saída do seu número, por exemplo, o NumberFormat moeda = NumberFormat.getCurrencyInstance(new Locale("pt","BR")); Double valor = new Double(1.99); String valorEmReais = moeda.format(valor); System.out.println(valorEmReais);
Creio que o código seja assim mesmo, mas dê uma olhada na API para aprofundar mais… A saída deve ser R$1,99 aqui no Brasil, na europa ele pega o símbolo do euro