2011-09-21 16 views
9

Intento encontrar, pero todo parece vago. Necesito convertir Object o to Double. ¿Es la forma correcta primero convertir a String? Gracias.forma correcta de Java convertir/objeto fundido a Doble

+2

¿Cuál es el tipo especial de su objeto? ¿Es realmente un doble o algo más? – nos

+0

¿Qué es un objeto? Es una clase desconocida o una clase doble que se ha tipeado a un objeto. – Rontologist

+0

"Intento encontrar, pero todo parece vago". - tu pregunta es demasiado vaga para obtener una respuesta obvia. por favor elabora. ¿Qué es 'Objeto o' y cuál es la intención? – Saket

Respuesta

8

No se puede convertir un objeto a Double si el objeto no es un doble.

Echa un vistazo a API.

particularmente en cuenta

valueOf(double d);

y

valueOf(String s);

Estos métodos le dan una forma de obtener una instancia Double partir de una cadena o de doble primitiva. (Tampoco los constructores, lea la documentación para ver cómo funcionan) El objeto que está intentando convertir de forma natural tiene que darle algo que se puede transformar en un doble.

Finalmente, tenga en cuenta que las instancias Double son inmutables: una vez creadas, no puede cambiarlas.

25
new Double(object.toString()); 

Pero me parece extraño que vaya de un objeto a un doble. Debería tener una mejor idea de la clase de objeto con la que está empezando antes de intentar una conversión. Es posible que haya un problema de calidad de código allí.

Tenga en cuenta que esto es una conversión, no de fundición.

+2

Si el objeto es nulo, lanzará nullpointerexception. –

+0

Double.valueOf (object.toString()) usa menos memoria – Loolooii

6

Puede usar el operador instanceof para probar si se trata de un doble antes del lanzamiento. Luego puedes lanzarlo a un doble. Además, puede probarlo contra otros tipos conocidos (por ejemplo, entero) y luego forzarlos en un doble manualmente si así lo desea.

Double d = null; 
    if (obj instanceof Double) { 
     d = (Double) obj; 
    } 
1

En la versión de Java antes de la 1.7 no se puede convertir objeto de tipo primitivo

double d = (double) obj; 

Puedes lanzar un objeto a un doble bien

Double d = (Double) obj; 

ten cuidado, que puede lanzar una ClassCastException si su objeto no es un Doble

2



También vale la pena mencionar: si se vio obligado a utilizar una versión anterior de Java anterior a la 1.5 e intenta usar Colecciones, no podrá parametrizar la colección con un tipo como Double.

Vas a tener que manualmente "cuadro" a la clase Double al añadir nuevos elementos, y "unbox" a la primitiva double mediante el análisis y la colada, hacer algo como esto:

LinkedList lameOldList = new LinkedList(); 
lameOldList.add(new Double(1.2)); 
lameOldList.add(new Double(3.4)); 
lameOldList.add(new Double(5.6)); 

double total = 0.0; 
for (int i = 0, len = lameOldList.size(); i < len; i++) { 
    total += Double.valueOf((Double)lameOldList.get(i)); 
} 


La lista de la vieja escuela contendrá solo el tipo Object y, por lo tanto, se debe convertir a Double.

Además, no podrá iterar a través de la lista con un bucle mejorado en las primeras versiones de Java, solo con un for-loop.

+1

¿Quiere decir "antes de 1.5"? Ahí es donde se introdujeron los genéricos y el autoboxing. ¿O quisiste decir algo más? –

+0

Vaya, usted es correcto @AlexeyRomanov, he editado mi respuesta para reflejar esto. –

4

Si su objeto representa un número, por ejemplo, como un entero, puede convertirlo en un número y luego llamar al método doubleValue().

Double asDouble(Object o) { 
    Double val = null; 
    if (o instanceof Number) { 
     val = ((Number) o).doubleValue(); 
    } 
    return val; 
} 
0

intentado todas estas modalidades de la conversión ->

obj2Double

public static void main(String[] args) { 

    Object myObj = 10.101; 
    System.out.println("Cast to Double: "+((Double)myObj)+10.99); //concates 

    Double d1 = new Double(myObj.toString()); 
    System.out.println("new Object String - Cast to Double: "+(d1+10.99)); //works 

    double d3 = (double) myObj; 
    System.out.println("new Object - Cast to Double: "+(d3+10.99));  //works 

    double d4 = Double.valueOf((Double)myObj); 
    System.out.println("Double.valueOf(): "+(d4+10.99));  //works 

    double d5 = ((Number) myObj).doubleValue(); 
    System.out.println("Cast to Number and call doubleValue(): "+(d5+10.99));  //works 

    double d2= Double.parseDouble((String) myObj); 
    System.out.println("Cast to String to cast to Double: "+(d2+10));  //works 
} 
Cuestiones relacionadas