Como converter fazer para converter a "," digitada pelo usuario para que não de erro?

14 respostas
R

Bem galera, na hora que eu executo, aí vou digitar um valor com “,” por exemplo: 9,75, da erro. Como eu corrigo este erro? Ah e outra pergunta como é que eu faço para mostrar apenas dois valores apos a virgula. Ah vale lembra que estou fazendo com o tipo de dados float. Peguei o text field da paleta do netbeans, e converti para float. VLW! Obrigado!

14 Respostas

ruivo

Bem, o Fórum está cheio das mesmas respostas. Eu mesmo já postei essa resposta. Aqui vai

http://www.guj.com.br/java/249701-android---decimalformat#1296603

yhhik

da erro pq que não é virgula, e sim ponto. se vc quiser substituir use o replaceAll.

vc quer mostrar em que?

float a=(float) 15.0023;
txtNome.setText(String.format ("%.2f",a));//em JTextField

System.out.printf("%.2f",a);//console
ruivo

Não, usar replaceAll é gambiarra pura. O correto é usar NumberFormat ou DecimalFormat, com os locales corretos.

Independente de onde for usar, vai de NumberFormat que tá tranquilo.

NumberFormat instance = DecimalFormat.getInstance(new Locale("pt", "BR"));
		instance.setMaximumFractionDigits(2);
		
		Double dValue;
		try {
			dValue = (Double) instance.parse("9,7000");
			System.out.println(dValue);
			NumberFormat nf = new DecimalFormat( "#.00" );
			System.out.println(nf.format(dValue));
		} catch (ParseException e) {
			e.printStackTrace();
		}
R
ruivo:
yhhik:
da erro pq que não é virgula, e sim ponto. se vc quiser substituir use o replaceAll.

Não, usar replaceAll é gambiarra pura. O correto é usar NumberFormat ou DecimalFormat, com os locales corretos.

Independente de onde for usar, vai de NumberFormat que tá tranquilo.

NumberFormat instance = DecimalFormat.getInstance(new Locale("pt", "BR"));
		instance.setMaximumFractionDigits(2);
		
		Double dValue;
		try {
			dValue = (Double) instance.parse("9,7000");
			System.out.println(dValue);
			NumberFormat nf = new DecimalFormat( "#.00" );
			System.out.println(nf.format(dValue));
		} catch (ParseException e) {
			e.printStackTrace();
		}
Cara, ta aqui a parte do código ao que me refiro.
double t1 = Float.parseFloat(Nota1.getText());     
        double t2 = Float.parseFloat(Nota2.getText());       
        double t3 = Float.parseFloat(Nota3.getText());
        double t4 = Float.parseFloat(Nota4.getText());
        double m = (t1+t2+t3+t4)/4;     
        
        Media.setText("" + m);

Está aí, são textfield, e foram criados a partir da paleta do netbeans.
E aí, como devo fazer para, mostrar apenas dois depois da virgula? E caso o usuário coloque uma virgula, não de erro?
VlW! Obrigado!

yhhik
ruivo:
yhhik:
da erro pq que não é virgula, e sim ponto. se vc quiser substituir use o replaceAll.

Não, usar replaceAll é gambiarra pura. O correto é usar NumberFormat ou DecimalFormat, com os locales corretos.

Independente de onde for usar, vai de NumberFormat que tá tranquilo.

NumberFormat instance = DecimalFormat.getInstance(new Locale("pt", "BR"));
		instance.setMaximumFractionDigits(2);
		
		Double dValue;
		try {
			dValue = (Double) instance.parse("9,7000");
			System.out.println(dValue);
			NumberFormat nf = new DecimalFormat( "#.00" );
			System.out.println(nf.format(dValue));
		} catch (ParseException e) {
			e.printStackTrace();
		}

gambiarra.. gambiarra pq, se eu posso fazer isso direto no textfield e passar o valor pronto para double?
sem falar do processamento com um comando, uma linha é possível fazer o que em 4.

ruivo

Pq é gambiarra oras!!!

Se o cara inputar 1.279,00, com replaceAll vai funcionar? com DecimalFormat funciona sem alterar uma linha.

R

galera, por favor ajudem-me. Agradeço por terem colocado códigos, mas e aí, estes códigos eu devo colocar ou não? Como eu faço isso pelo netbeans(para utilizar no textfield “arrastado” da paleta)?

yhhik

ruivo:
yhhik:

gambiarra… gambiarra pq, se eu posso fazer isso direto no textfield e passar o valor pronto para double?
sem falar do processamento com um comando, uma linha é possível fazer o que em 4.

Pq é gambiarra oras!!!

Se o cara inputar 1.279,00, com replaceAll vai funcionar? com DecimalFormat funciona sem alterar uma linha.

kkkkkkkkkkkkkkk
gambiarra pq o professor disse né…
ta certo, se for pensar na exceção para esse caso DecimalFormat é a melhor o opção, mas replaceAll nao deve ser encarado como gambiarra, vai haver casos que ele será a melhor opção.

yhhik

cara já foi postado duas maneiras diferentes de se resolver isso e de se mostrar 2 casas depois do ponto flutuante… escolha a que vc acha mais adequada e adapte as suas necessidades.

ruivo

yhhik:

kkkkkkkkkkkkkkk
gambiarra pq o professor disse né…
ta certo, se for pensar na exceção para esse caso DecimalFormat é a melhor o opção, mas replaceAll nao deve ser encarado como gambiarra, vai haver casos que ele será a melhor opção.

Não, gambiarra pq mais de 6 anos desenvolvendo em java profissionalmente (uns 8, se contar a academia) te dão certa experiência para dizer isso com alguma propriedade.

yhhik

sim cara…só estou dizendo que vc está generalizando, como eu disse antes nesse caso se levar em conta a exceção
o DecimalFormat é a melhor opção, mas vai haver casos em que usar o replaceAll será a melhor opção.

L

Que fique claro que não quero tomar as dores de ninguem, mais quando o Replace all e a melhor opção em questoes aritméticas ?

yhhik

não falo somente de questões aritméticas, o objetivo era trocar uma virgula por um ponto, eu disse que era melhor fazer isso direto na String que o textField retorna usando o replaceAll e entregar o valor correto em float.
mas acho que o colega Ruivo generalizou a dizer que replaceAll é uma gambiarra… não disse que o replace pode ser melhor em questões aritméticas.

ruivo

yhhik:
não falo somente de questões aritméticas, o objetivo era trocar uma virgula por um ponto, eu disse que era melhor fazer isso direto na String que o textField retorna usando o replaceAll e entregar o valor correto em float.
mas acho que o colega Ruivo generalizou a dizer que replaceAll é uma gambiarra… não disse que o replace pode ser melhor em questões aritméticas.

Tá, vamos esclarecer então. Ninguém está errado nessa história. Quando eu disse que usar replaceAll era gambiarra, era nesse contexto de, a partir de uma string, vc transformá-la em um number (double, integer, float, whatever…) Tanto é que a alternativa que sempre apontei foi usar o DecimalFormat.

Agora, se vc quer substituir algo da string e o resultado é outra string, oras, use replaceAll e seja feliz.

Entretanto, contudo, todavia, continuo afirmando que, usar replaceAll para transformar string em números, NESSE CASO, é sim gambiarra pura.

Criado 5 de dezembro de 2011
Ultima resposta 7 de dez. de 2011
Respostas 14
Participantes 4