2011-09-21 13 views
9

मैं खोजने की कोशिश करता हूं, लेकिन सभी अस्पष्ट लगते हैं। मुझे ऑब्जेक्ट ओ को डबल में बदलने की आवश्यकता है। क्या सही तरीका पहले स्ट्रिंग में परिवर्तित होता है? धन्यवाद।जावा सही तरीका कन्वर्ट/कास्ट ऑब्जेक्ट डबल

+2

अपने वस्तु की विशेष प्रकार क्या है? क्या यह वास्तव में एक डबल है, या कुछ और? – nos

+0

ऑब्जेक्ट क्या है? क्या यह एक अज्ञात वर्ग या एक डबल क्लास है जिसे ऑब्जेक्ट में टाइप किया गया है। – Rontologist

+0

"मैं खोजने की कोशिश करता हूं, लेकिन सभी अस्पष्ट लगते हैं।" - एक स्पष्ट उत्तर पाने के लिए आपका प्रश्न बहुत अस्पष्ट है। कृपया विस्तार से बताएं। 'ऑब्जेक्ट ओ' क्या है और इरादा क्या है? – Saket

उत्तर

8

यदि ऑब्जेक्ट डबल नहीं है तो आप किसी ऑब्जेक्ट को Double पर नहीं डाल सकते हैं।

API देखें।

विशेष रूप से ध्यान दें

valueOf(double d);

और

valueOf(String s);

इन तरीकों में आप एक स्ट्रिंग या डबल आदिम से एक Double उदाहरण हो रही का एक तरीका प्रदान करते हैं। (रचनाकार भी नहीं; यह देखने के लिए प्रलेखन पढ़ें कि वे कैसे काम करते हैं) जिस वस्तु को आप स्वाभाविक रूप से परिवर्तित करने की कोशिश कर रहे हैं उसे आपको कुछ देना है जिसे दोहराया जा सकता है।

अंत में, ध्यान रखें कि Double उदाहरण अपरिवर्तनीय हैं - एक बार बनाया गया है कि आप उन्हें बदल नहीं सकते हैं।

25
new Double(object.toString()); 

लेकिन यह मेरे लिए अजीब लगता है कि आप ऑब्जेक्ट से डबल तक जा रहे हैं। रूपांतरण के प्रयास से पहले आपको एक बेहतर विचार होना चाहिए कि आप किस वर्ग का ऑब्जेक्ट शुरू कर रहे हैं। आपके पास कोड कोड की समस्या हो सकती है।

ध्यान दें कि यह एक रूपांतरण है, कास्टिंग नहीं।

+2

यदि वस्तु शून्य है, तो यह nullpointerexception फेंक देगा। –

+0

Double.valueOf (object.toString()) कम स्मृति का उपयोग करता है – Loolooii

6

आप उदाहरण के ऑपरेटर का उपयोग यह जांचने के लिए कर सकते हैं कि यह कास्टिंग करने से पहले एक डबल है या नहीं। फिर आप इसे सुरक्षित रूप से डबल पर डाल सकते हैं। इसके अलावा आप इसे अन्य ज्ञात प्रकारों (उदाहरण के लिए इंटीजर) के खिलाफ परीक्षण कर सकते हैं और फिर वांछित होने पर उन्हें मैन्युअल रूप से डबल में जोड़ सकते हैं।

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

जावा संस्करण 1.7 से पहले आप आदिम प्रकार

double d = (double) obj; 

आप एक डबल ठीक

Double d = (Double) obj; 

खबरदार करने के लिए एक वस्तु डाल सकता करने के लिए वस्तु डाली नहीं कर सकते, यह एक फेंक कर सकते हैं क्लासकास्ट अपवाद अगर आपकी ऑब्जेक्ट डबल

2


नहीं है उल्लेख करने लायक भी - यदि आपको 1.5 से पहले पुराने जावा संस्करण का उपयोग करने के लिए मजबूर किया गया था, और आप संग्रह का उपयोग करने की कोशिश कर रहे हैं, तो आप Double जैसे संग्रह को पैरामीटर करने में सक्षम नहीं होंगे।

आप वर्ग Double के लिए मैन्युअल रूप से "बॉक्स" होगा जब पार्स करने और कास्टिंग, कुछ इस तरह करने से नए आइटम, और आदिम double करने के लिए "Unbox" जोड़कर:

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 पर डाला जाना चाहिए।

इसके अलावा, आप प्रारंभिक जावा संस्करणों में एक उन्नत-के-लूप के साथ सूची के माध्यम से पुन: सक्रिय नहीं हो पाएंगे - केवल फॉर-लूप के साथ।

+1

क्या आपका मतलब है "1.5 से पहले"? यही वह जगह है जहां जेनेरिक और ऑटोबॉक्सिंग पेश की गई थीं। या आप कुछ और मतलब था? –

+0

ओह, आप सही हैं @AlexeyRomanov, मैंने इसे प्रतिबिंबित करने के लिए अपना जवाब संपादित किया है। –

4

यदि आपका ऑब्जेक्ट एक संख्या का प्रतिनिधित्व करता है, उदाहरण के लिए, जैसे इंटीजर, तो आप इसे किसी नंबर पर डाल सकते हैं और डबलवैल्यू() विधि को कॉल कर सकते हैं।

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

रूपांतरण के लिए इन सभी तरीकों की कोशिश की ->

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 
} 
संबंधित मुद्दे