जवाबों:
ए Double
नहीं है Integer
, इसलिए कलाकार काम नहीं करेंगे। Double
वर्ग और double
आदिम के बीच अंतर पर ध्यान दें । यह भी ध्यान दें कि a एक Double
है Number
, इसलिए इसमें वह विधि है intValue
, जिसका उपयोग आप मूल्य को एक आदिम के रूप में प्राप्त करने के लिए कर सकते हैं int
।
intValue()
फिर बुलाओ ।
intValue()
, यह सिर्फ double
एक करने के लिए जाती है int
।
आपको इस तरह से विधि intValue () का उपयोग करके स्पष्ट रूप से अंतर मान प्राप्त करने की आवश्यकता है:
Double d = 5.25;
Integer i = d.intValue(); // i becomes 5
या
double d = 5.25;
int i = (int) d;
2^31 - 1 (Integer.MAX_VALUE)
ओवरफ्लो होगा।
1.6 -> 1
, 1.4 -> 1
, -1.6 -> -1
, -1.4 -> -1
,
मुझे लगता है कि नुकसान के कवर और उसके पीछे के तर्क के बिना अन्य उत्तरों को समझना असंभव है।
आप सीधे Integer
किसी Double
वस्तु को नहीं डाल सकते । भी Double
और Integer
अपरिवर्तनीय वस्तुएं हैं, इसलिए आप उन्हें किसी भी तरह से संशोधित नहीं कर सकते।
प्रत्येक संख्यात्मक वर्ग में एक आदिम विकल्प ( Double
बनाम double
, Integer
बनाम int
, ...) होता है। ध्यान दें कि ये प्रिमिटिव एक लोअरकेस वर्ण (जैसे int
) से शुरू होते हैं। यह हमें बताता है कि वे कक्षा / वस्तु नहीं हैं। जिसका मतलब यह भी है कि उनके पास तरीके नहीं हैं। इसके विपरीत, कक्षाएं (जैसे Integer
) इन आदिमों के चारों ओर बक्से / रैपर की तरह काम करती हैं, जिससे उन्हें वस्तुओं की तरह उपयोग करना संभव हो जाता है।
एक को बदलने के Double
लिए Integer
आपको इस रणनीति का पालन करना होगा:
Double
वस्तु को आदिम में बदलें double
। (= "अनबॉक्सिंग")double
को आदिम में बदलें int
। (= "कास्टिंग")int
वापस किसी Integer
वस्तु में बदलना। (= "बॉक्सिंग")// starting point
Double myDouble = Double.valueOf(10.0);
// step 1: unboxing
double dbl = myDouble.doubleValue();
// step 2: casting
int intgr = (int) dbl;
// step 3: boxing
Integer val = Integer.valueOf(intgr);
वास्तव में एक शॉर्टकट है। आप Double
सीधे एक आदिम से सीधे अनबॉक्स कर सकते हैं int
। इस तरह, आप चरण 2 को पूरी तरह से छोड़ सकते हैं।
Double myDouble = Double.valueOf(10.0);
Integer val = Integer.valueOf(myDouble.intValue()); // the simple way
हालांकि, बहुत सारी चीजें हैं जो ऊपर दिए गए कोड में शामिल नहीं हैं। कोड-उपरोक्त शून्य-सुरक्षित नहीं है।
Double myDouble = null;
Integer val = Integer.valueOf(myDouble.intValue()); // will throw a NullPointerException
// a null-safe solution:
Integer val = (myDouble == null)? null : Integer.valueOf(myDouble.intValue());
अब यह अधिकांश मूल्यों के लिए ठीक काम करता है। हालाँकि पूर्णांक में a की तुलना में बहुत छोटी श्रेणी (न्यूनतम / अधिकतम मान) होती है Double
। उसके ऊपर, युगल "विशेष मान" भी धारण कर सकते हैं, जो पूर्णांक नहीं कर सकते हैं:
तो, अनुप्रयोग के आधार पर, आप बुरा अपवाद से बचने के लिए कुछ फ़िल्टरिंग जोड़ना चाह सकते हैं।
फिर, अगली कमी राउंडिंग रणनीति है। डिफ़ॉल्ट रूप से जावा हमेशा गोल होगा। राउंडिंग डाउन सभी प्रोग्रामिंग भाषाओं में सही समझ में आता है। मूल रूप से जावा बस कुछ बाइट्स फेंक रहा है। वित्तीय अनुप्रयोगों में आप निश्चित रूप से आधा-अप गोलाई (जैसे: round(0.5) = 1
और round(0.4) = 0
) का उपयोग करना चाहेंगे ।
// null-safe and with better rounding
long rounded = (myDouble == null)? 0L: Math.round(myDouble.doubleValue());
Integer val = Integer.valueOf(rounded);
आपको इसमें ऑटो (संयुक्त राष्ट्र) मुक्केबाजी का उपयोग करने के लिए लुभाया जा सकता है , लेकिन मैं नहीं करूंगा। यदि आप पहले से ही फंस गए हैं, तो अगले उदाहरणों में यह स्पष्ट नहीं होगा। यदि आप ऑटो (इन) बॉक्सिंग के आंतरिक कामकाज को नहीं समझते हैं, तो कृपया इसका उपयोग न करें।
Integer val1 = 10; // works
Integer val2 = 10.0; // doesn't work
Double val3 = 10; // doesn't work
Double val4 = 10.0; // works
Double val5 = null;
double val6 = val5; // doesn't work (throws a NullPointerException)
मुझे लगता है कि निम्नलिखित एक आश्चर्य नहीं होना चाहिए। लेकिन अगर यह है, तो आप जावा में कास्टिंग के बारे में कुछ लेख पढ़ना चाह सकते हैं।
double val7 = (double) 10; // works
Double val8 = (Double) Integer.valueOf(10); // doesn't work
Integer val9 = (Integer) 9; // pure nonsense
इसके अलावा, new Integer()
कंस्ट्रक्टर (कुछ अन्य जवाबों के प्रस्ताव के रूप में) का उपयोग करने के लिए परीक्षा न करें । valueOf()
क्योंकि वे कैशिंग का उपयोग तरीकों बेहतर हैं। इन तरीकों का उपयोग करना एक अच्छी आदत है, क्योंकि समय-समय पर वे आपको कुछ स्मृति बचाएंगे।
long rounded = (myDouble == null)? 0L: Math.round(myDouble.doubleValue());
Integer val = new Integer(rounded); // waste of memory
मुझे तीन संभावनाएं दिखती हैं। पहले दो अंकों को काट दिया जाता है, अंतिम एक निकटतम इंटेगर को गोल करता है।
double d = 9.5;
int i = (int)d;
//i = 9
Double D = 9.5;
int i = Integer.valueOf(D.intValue());
//i = 9
double d = 9.5;
Long L = Math.round(d);
int i = Integer.valueOf(L.intValue());
//i = 10
ऐशे ही:
Double foo = 123.456;
Integer bar = foo.intValue();
वास्तव में, सबसे सरल तरीका उपयोग करना है intValue()
। हालाँकि, यह केवल पूर्णांक भाग लौटाता है; यह कोई गोल नहीं करता है। यदि आप डबल मान के पूर्णांक को पास चाहते हैं , तो आपको यह करने की आवश्यकता होगी:
Integer integer = Integer.valueOf((int) Math.round(myDouble)));
और अशक्त मामले को मत भूलना:
Integer integer = myDouble == null ? null : Integer.valueOf((int) Math.round(myDouble)));
Math.round()
रिश्तेदार की कृपा से विषमता और NaN जैसे विषम बतख के मामलों को संभालता है।
double a = 13.34;
int b = (int) a;
System.out.println(b); //prints 13
बस इसे इस तरह से करें ...
Double d = 13.5578;
int i = d.intValue();
System.out.println(i);
Double d = 100.00;
Integer i = d.intValue();
एक यह भी जोड़ना चाहिए कि यह ऑटोबॉक्सिंग के साथ काम करता है।
अन्यथा, आपको एक इंटिमेट (आदिम) मिलता है और फिर वहां से एक इंटेगर मिल सकता है:
Integer i = new Integer(d.intValue());
new Integer(int)
, इसके बजाय उपयोग करें Integer.valueOf(int)
, जिसमें छोटे पूर्णांकों के लिए कैश है, जैसे कि यह एक।
आप "संकीर्ण या स्पष्ट प्रकार रूपांतरण" का उपयोग करके ऐसा कर सकते हैं, डबल → लंबा → इंट। मुझे उम्मीद है कि यह काम करेगा।
double d = 100.04;
long l = (long)d; // Explicit type casting required
int i = (int)l; // Explicit type casting required
PS: यह 0 देगा क्योंकि डबल में सभी दशमलव मान हैं और बाईं ओर कुछ भी नहीं है। 0.58 के मामले में, यह इसे 0. से कम कर देगा लेकिन दूसरों के लिए यह जादू करेगा।
इसको आजमाओ
double doubleValue = 6.5;Double doubleObj = new Double(doubleValue);int intResult = doubleObj.intValue();
मेमोरी कुशल, क्योंकि यह डबल के पहले से बने इंस्टेंस को साझा करेगा।
Double.valueOf(Math.floor(54644546464/60*60*24*365)).intValue()
Math.floor(...)
? intValue()
हमेशा वैसे भी फर्श।
यह मेरे लिए काम किया है। इसे इस्तेमाल करे:
double od = Double.parseDouble("1.15");
int oi = (int) od;