我试图找到,但似乎都模糊不清。 我需要将Object o转换为Double。 是否正确的方式首先转换为String? 感谢。
答案 0 :(得分:30)
new Double(object.toString());
但是对于我来说,从一个物体变成一个物体似乎很奇怪。在尝试转换之前,您应该更好地了解您正在开始的对象类。你可能会遇到一些代码质量问题。
请注意,这是转化,而不是转换。
答案 1 :(得分:12)
如果对象不是Double,则无法将对象强制转换为Double
。
查看API。
特别注意
valueOf(double d);
和
valueOf(String s);
这些方法为您提供了从String或double原语获取Double
实例的方法。 (也不是构造函数;阅读文档以了解它们是如何工作的)您尝试自然转换的对象必须为您提供可以转换为double的内容。
最后,请记住Double
实例是不可变的 - 一旦创建,您就无法更改它们。
答案 2 :(得分:7)
如果您的Object表示一个数字,例如Integer,您可以将其强制转换为Number,然后调用doubleValue()方法。
Double asDouble(Object o) {
Double val = null;
if (o instanceof Number) {
val = ((Number) o).doubleValue();
}
return val;
}
答案 3 :(得分:6)
您可以使用instanceof运算符进行测试,以确定在转换之前它是否为double。然后,您可以安全地将其转换为双倍。此外,您可以根据其他已知类型(例如整数)对其进行测试,然后根据需要将它们强制转换为双精度。
Double d = null;
if (obj instanceof Double) {
d = (Double) obj;
}
答案 4 :(得分:2)
在1.7之前的Java版本中,您无法将对象转换为基本类型
double d = (double) obj;
您可以将对象强制转换为双精度
Double d = (Double) obj;
请注意,如果您的对象不是Double
,它会抛出ClassCastException答案 5 :(得分:2)
另外值得一提的是 - 如果您被迫使用1.5之前的旧Java版本,并且您尝试使用集合,则无法使用Double
等类型对集合进行参数化。
在添加新项目时,您必须手动将“ box ”添加到类Double
,并通过解析将“ unbox ”手动添加到原始double
和铸造,做这样的事情:
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) );
}
旧学校列表将仅包含类型Object
,因此必须转换为Double
。
此外,您将无法在早期Java版本中使用增强型循环遍历列表 - 仅使用for循环。
答案 6 :(得分:1)
尝试了所有这些转换方法 - &gt;
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
}
答案 7 :(得分:1)
我尝试了这个,并且奏效了:
Object obj = 10;
String str = obj.toString();
double d = Double.valueOf(str).doubleValue();