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.
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.
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.
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;
}
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;
}
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
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.
J'ai essayé toutes ces méthodes de conversion ->
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
}