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

12 respostas
d34d_d3v1l

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

12 Respostas

WendersonLP

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

d34d_d3v1l

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

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

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

Anime

Oi,

Use NumberFormatException

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

Exemplo...

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)
             } 
     }
  }
d34d_d3v1l

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:

Anime

Que bom rsrs… :wink:

Desculpe… :oops:

L

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

otaviojava

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

d34d_d3v1l

uai,

não entendi,

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

abraços

L

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

drigo.angelo

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]

d34d_d3v1l

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

drigo.angelo

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

Criado 7 de fevereiro de 2011
Ultima resposta 8 de fev. de 2011
Respostas 12
Participantes 6