Java正确的方式转换/转换对象为Double

时间:2011-09-21 17:17:35

标签: java casting double

我试图找到,但似乎都模糊不清。 我需要将Object o转换为Double。 是否正确的方式首先转换为String? 感谢。

8 个答案:

答案 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;

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
}

答案 7 :(得分:1)

我尝试了这个,并且奏效了:

Object obj = 10;
String str = obj.toString(); 
double d = Double.valueOf(str).doubleValue();