Cadê o poder do Java na hora de converter tipos?

7 respostas
C

Se eu tento converter uma String para Double, ocorre um erro.

Exemplo:

Double.parseDouble("-34.7");

Ou seja, quero converter para Double, mas quero uma conversão adequada, pois se trata de um número negativo não-inteiro.

Alguma dica ou outro método de casting?

Obrigado.

7 Respostas

fmeyer

presta atencao no idioma do teu ambiente.

public class Mainclass {
    public static void main ( String args[] ) {

        Double d = Double.parseDouble("-34.7"); // para en_US

        Double d = Double.parseDouble("-34,7"); // para pt_BR [ VIRGULA ] 

        System.out.println( d );
    }
}
C

Tem um meio prático de checar o idioma do ambiente em tempo de execução?

Mais um detalhe: Quando a String possui ponto, ela é convertida sem problema para Double, mas quando ela possui ponto e o sinal de negativo, ocorre um erro. Logo não se trata de um problema de ponto ou vírgula, mas sim do sinal de negativo no começo da String…
E agora?
Alguma sugestão?

Obrigado pela ajuda!

sudeval

aqui nao deu nenhum erro relacionado ao - .

Ricardo_Siqueira

Tentei aqui e converteu certo também.

Fabricio_Cozer_Marti
scottys0:
presta atencao no idioma do teu ambiente.
public class Mainclass {
    public static void main ( String args[] ) {

        Double d = Double.parseDouble("-34.7"); // para en_US

        Double d = Double.parseDouble("-34,7"); // para pt_BR [ VIRGULA ] 

        System.out.println( d );
    }
}
só corrigindo, o Double.parseDouble("-34.7"); retorna um double primitivo. E o erro que pode dar aí poderia ser de vírgula ou ponto, a depender da localidade, que você pode obter chamando Locale.getDefault();
Ricardo_Siqueira

aliás você não estaria tentando colocar isso num double não né…se não vai dar erro mesmo né =/

Matheus_Tardivo

Exemplo:

class TestDouble {

	public static void main(String[] args) {

		Double d1 = Double.valueOf("-34.7"); // objeto Double
		double d2 = Double.parseDouble("-34.7"); // primitivo double

		// funciona somente jdk >= 1.5; "autoboxing"
		// no jdk <= 1.4: error "incompatible types"
		Double d3 = Double.parseDouble("-34.7");

		System.out.println(d1 + "\n" + d2 + "\n" + d3);
	}
}

A compilação e saida:

// testando para java 1.4
>javac -source 1.4 TestDouble.java
TestDouble.java:10: incompatible types
found   : double
required: java.lang.Double
                Double d3 = Double.parseDouble("-34.7");
                                              ^
1 error

// agora com java 1.5
>javac TestDouble.java

>java TestDouble
-34.7
-34.7
-34.7
:arrow: <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/autoboxing.html" data-bbcode="true">Autoboxing</a>

:arrow: <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Double.html" data-bbcode="true">Class Double</a>

:arrow: <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Double.html#parseDouble(java.lang.String)" data-bbcode="true">public static double parseDouble(String s)</a>

:arrow: <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Double.html#valueOf(java.lang.String)" data-bbcode="true">public static Double valueOf(String s)</a>
Criado 18 de abril de 2006
Ultima resposta 19 de abr. de 2006
Respostas 7
Participantes 6