web-dev-qa-db-ja.com

JavaオブジェクトをDoubleに変換/キャストする正しい方法

見つけようとしましたが、すべてがあいまいに見えます。 Object oをDoubleに変換する必要があります。最初に文字列に変換する正しい方法はありますか?ありがとう。

17
user710818

オブジェクトがDoubleでない場合、オブジェクトをDoubleにキャストできません。

[〜#〜] api [〜#〜] を確認してください。

特に注意

valueOf(double d);

そして

valueOf(String s);

これらのメソッドは、StringまたはdoubleプリミティブからDoubleインスタンスを取得する方法を提供します。 (コンストラクターでもありません。ドキュメントを読んでその仕組みを確認してください)変換しようとしているオブジェクトは、doubleに変換できるものを提供する必要があります。

最後に、Doubleインスタンスは不変であることに注意してください。作成したインスタンスは変更できません。

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

しかし、あなたがオブジェクトからダブルに行くことは私には奇妙に思えます。変換を試みる前に、どのクラスのオブジェクトから始めているかをよく理解しておく必要があります。コード品質の問題が少しあるかもしれません。

これは変換であり、キャストではないことに注意してください。

30
RichW

オブジェクトが整数などの数値を表す場合は、数値にキャストしてからdoubleValue()メソッドを呼び出すことができます。

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

Instanceof演算子を使用して、キャストする前にdoubleかどうかをテストできます。その後、安全にdoubleにキャストできます。さらに、他の既知のタイプ(整数など)に対してテストし、必要に応じて手動で強制的にdoubleに変換できます。

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

Java 1.7より前のバージョンでは、オブジェクトをプリミティブ型にキャストできません

double d = (double) obj;

オブジェクトをDoubleにキャストできます

Double d = (Double) obj;

オブジェクトがDoubleでない場合、ClassCastExceptionをスローする可能性があることに注意してください

2



言及する価値もあります-古いJava 1.5より前のバージョンを使用することを強制され、コレクションを使用しようとしている場合、パラメーター化することはできませんDoubleなどのタイプのコレクション。

新しいアイテムを追加するときは、クラスDoubleに手動で「box」、「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ループでのみ、拡張for-loopを使用してリストを反復処理することはできません。

2
Ian Campbell

変換のためにこれらすべての方法を試しました->

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