web-dev-qa-db-fra.com

Java manière correcte convertir / convertir un objet en Double

J'essaye de fonder, mais tout semble vague. J'ai besoin de convertir l'objet o en double. La bonne façon est-elle d'abord convertie en chaîne? Merci.

17
user710818

Vous ne pouvez pas convertir un objet en Double si l'objet n'est pas un Double.

Découvrez API .

notez particulièrement

valueOf(double d);

et

valueOf(String s);

Ces méthodes vous permettent d'obtenir une instance Double à partir d'une chaîne ou d'une double primitive. (Pas non plus les constructeurs; lisez la documentation pour voir comment ils fonctionnent) L'objet que vous essayez de convertir naturellement doit vous donner quelque chose qui peut être transformé en double.

Enfin, gardez à l'esprit que les instances de Double sont immuables - une fois créées, vous ne pouvez pas les modifier.

12
hvgotcodes
new Double(object.toString());

Mais il me semble étrange que vous passiez d'un objet à un double. Vous devriez avoir une meilleure idée de la classe d'objet par laquelle vous commencez avant de tenter une conversion. Vous pourriez avoir un petit problème de qualité de code là-bas.

Notez qu'il s'agit d'une conversion et non d'un casting.

30
RichW

Si votre objet représente un nombre, par exemple, comme un entier, vous pouvez le convertir en un nombre, puis appelez la méthode doubleValue ().

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

Vous pouvez utiliser l'opérateur instanceof pour tester pour voir s'il s'agit d'un double avant la conversion. Vous pouvez ensuite le jeter en toute sécurité au double. De plus, vous pouvez le tester contre d'autres types connus (par exemple Integer), puis les contraindre manuellement en double si vous le souhaitez.

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

Dans Java version antérieure à 1.7, vous ne pouvez pas convertir un objet en type primitif

double d = (double) obj;

Vous pouvez très bien lancer un objet en double

Double d = (Double) obj;

Attention, il peut lever une ClassCastException si votre objet n'est pas un Double

2
Jarek Przygódzki



A noter également - si vous étiez obligé d'utiliser une ancienne version Java antérieure à 1.5, et que vous essayez d'utiliser des collections, vous ne pourrez pas paramétrer collection avec un type tel que Double.

Vous devrez manuellement "box" à la classe Double lors de l'ajout de nouveaux éléments, et "nbox" à la primitive double en analysant et en castant, en faisant quelque chose comme ceci:

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 liste old-school contiendra uniquement le type Object et doit donc être convertie en Double.

De plus, vous ne pourrez pas parcourir la liste avec une boucle améliorée pour les premières versions Java - uniquement avec une boucle for.

2
Ian Campbell

J'ai essayé toutes ces méthodes de conversion ->

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
}
1
Yash P Shah