Erro básico de conversão..mas não sei como resolver

5 respostas
S

Olá estou com um problema que acredito ser bem facil de resolver mas eu não to conseguindo… procurei no fórum e não achei a resposta
o problema é o seguinte tenho uma String s, com valor s = “1,32” tenho que pegar esta informação e gravar no meu banco, minha duvida é no momento de pegar esta string e transforma-la para Double, Float ou alguma coisa que der certo, para poder persistir na base, pois só funciona se fosse s = “1.32” aí tudo bem mas “1,32” não rola da erro.

public class Teste {	
	public static void main(String args[]){
		String s = "1,32";
		Double d;
		Float f;
		d = Double.parseDouble(s);
		f = Float.parseFloat(s);
		
		System.out.println(d);
		System.out.println(f);
	}
}

Dá o erro abaixo:

Exception in thread main java.lang.NumberFormatException: For input string: 1,32at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)

at java.lang.Double.parseDouble(Unknown Source)

at br.com.sumus.teste.TesteData.main(TesteData.java:12)

Só funciona se…

public class Teste {	
	public static void main(String args[]){
		String s = "1,32";
		Double d;
		Float f;
		d = Double.parseDouble(s);
		f = Float.parseFloat(s);
		
		System.out.println(d);
		System.out.println(f);
	}
}

Desde já agradeço.

5 Respostas

P

Forma rapida:

public class Teste {	
 	public static void main(String args[]){
 		String s = "1,32";
 		double d;
 		float f;
		d = Double.parseDouble(s.replace(',','.'));
 		f = Float.parseFloat(s.replace(',','.'));
 		
 		System.out.println(d);
 		System.out.println(f);
 	}
 }
S

O problema é que o valor que dei como exemplo ele não é fixo, e a classe que você me passou como exemplo ela funciona até 999,99 valores maior por exemplo se colocar 1.500,32 dá o erro, abaixo:

Exception in thread main java.lang.NumberFormatException: multiple points

at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)

at java.lang.Double.parseDouble(Unknown Source)

at br.com.sumus.teste.TesteData.main(TesteData.java:12)

preciso de algo que trate qualquer valor.

I

resolve ?

import java.text.*;
import java.util.*;

.....
	String inStr = "1.500,32"; // "1,32", etc
	Locale locBrazil = new Locale("pt", "BR");
	NumberFormat nf = NumberFormat.getInstance(locBrazil);
	Number n = nf.parse(inStr);
T

Cara da uma olhada na API de NumberFormat, nela você pode especificar um Locale que encapsula estas diferenças de formato, tipo separar milhares por pontos ou vírgulas etc.

S

IndyanaJones Valeu, cara deu certo…
E obrigado a todos que responderam.

Criado 14 de junho de 2006
Ultima resposta 14 de jun. de 2006
Respostas 5
Participantes 4