जवाबों:
जावा 8 में अपडेट किया गया:
Math.toIntExact(value);
मूल उत्तर:
सरल प्रकार की कास्टिंग इसे करना चाहिए:
long l = 100000;
int i = (int) l;
ध्यान दें, हालांकि, बड़ी संख्या (आमतौर पर की तुलना में बड़ी 2147483647और छोटी -2147483648) बिट्स में से कुछ खो देंगे और गलत तरीके से प्रतिनिधित्व करेंगे।
उदाहरण के लिए, के 2147483648रूप में प्रतिनिधित्व किया जाएगा -2147483648।
Long x = 100L;
int y = x.intValue();
intValue()बैकग्राउंड में यहां जो कुछ भी है, वह सभी कास्ट कर रहा है .. राइट?
longयहाँ एक आदिम नहीं है। इसका संदर्भ प्रकार, Longजो सीधे एक आदिम के लिए डाल नहीं सकता है int। int y = (int)x;एक निष्पादन फेंक देगा, लेकिन int y = (int)(long)xकाम करेगा। (इसका कारण
छोटे मूल्यों के लिए, कास्टिंग पर्याप्त है:
long l = 42;
int i = (int) l;
हालांकि, एक longएक से अधिक जानकारी रख सकते हैं int, तो यह पूरी तरह से कनवर्ट करने के लिए संभव नहीं है longकरने के लिए int, सामान्य स्थिति में। यदि आपके longपास एक संख्या से कम या उसके बराबर की संख्या Integer.MAX_VALUEकिसी भी जानकारी को खोए बिना कास्टिंग द्वारा परिवर्तित कर सकती है।
उदाहरण के लिए, निम्न नमूना कोड:
System.out.println( "largest long is " + Long.MAX_VALUE );
System.out.println( "largest int is " + Integer.MAX_VALUE );
long x = (long)Integer.MAX_VALUE;
x++;
System.out.println("long x=" + x);
int y = (int) x;
System.out.println("int y=" + y);
मेरी मशीन पर निम्न आउटपुट का उत्पादन करता है:
largest long is 9223372036854775807
largest int is 2147483647
long x=2147483648
int y=-2147483648
नकारात्मक संकेत पर ध्यान दें y। क्योंकि xएक मान एक पूर्णांक से बड़ा होता है। MAX_VALUE, int yइसे धारण करने में असमर्थ था। इस मामले में यह नकारात्मक संख्याओं के आसपास लिपटे रहा।
यदि आप स्वयं इस मामले को संभालना चाहते हैं, तो आप कुछ ऐसा कर सकते हैं:
if ( x > (long)Integer.MAX_VALUE ) {
// x is too big to convert, throw an exception or something useful
}
else {
y = (int)x;
}
यह सब सकारात्मक संख्या मानता है। नकारात्मक संख्या के लिए, MIN_VALUE'MAX_VALUE' के बजाय का उपयोग करें
जावा 8 के बाद से आप उपयोग कर सकते हैं: Math.toIntExact (लंबे मूल्य)
देखें JavaDoc: Math.toIntExact
लंबे तर्क का मूल्य लौटाता है; एक अपवाद को फेंक देता है अगर मूल्य एक intflows है।
Math.toIntExactJDK 8 का स्रोत कोड :
public static int toIntExact(long value) {
if ((int)value != value) {
throw new ArithmeticException("integer overflow");
}
return (int)value;
}
यदि अमरूद पुस्तकालय का उपयोग कर रहे हैं, तो वहाँ Ints.checkedCast(long)और Ints.saturatedCast(long)परिवर्तित longकरने के लिए तरीके हैं int।
long x = 3;
int y = (int) x;
लेकिन यह मानता है कि longएक के रूप में प्रतिनिधित्व किया जा सकता है int, तुम दोनों के बीच अंतर पता है?
आप आदिम और कॉल के Longबजाय रैपर का उपयोग कर सकते हैंlong
Long.intValue()
यह longएक में फिट करने के लिए तदनुसार मूल्य को गोल / छोटा करता है int।
यदि प्रत्यक्ष कास्टिंग त्रुटि दिखाती है तो आप इसे इस तरह कर सकते हैं:
Long id = 100;
int int_id = (int) (id % 100000);
जावा में, एक लंबे समय से हस्ताक्षरित 64 बिट्स संख्या है, जिसका अर्थ है कि आप -9,223,372,036,854,775,808 और 9,223,372,036,854,775,807 (समावेशी) के बीच संख्याएँ संग्रहीत कर सकते हैं।
दूसरी ओर, एक इंट, 32 बिट्स नंबर पर हस्ताक्षरित है, जिसका अर्थ है कि आप नंबर को -2,147,483,648 और 2,147,483,647 (समावेशी) के बीच स्टोर कर सकते हैं।
इसलिए यदि आपका लॉन्ग किसी इंट के लिए अनुमत मूल्यों से बाहर है, तो आपको एक मूल्यवान रूपांतरण नहीं मिलेगा।
यहाँ आदिम जावा प्रकार के आकारों के बारे में विवरण:
http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
में जावा 8 मैं निम्नलिखित तरीके से करते हैं
long l = 100L;
int i = Math.toIntExact(l);
ArithmaticExceptionयदि longमान की सीमा से अधिक है, तो यह विधि फेंकता है int। इस प्रकार मैं डेटा हानि से सुरक्षित हूं।
यदि आप एक सुरक्षित रूपांतरण करना चाहते हैं और लैम्ब्डा अभिव्यक्ति के साथ Java8 का उपयोग करना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:
val -> Optional.ofNullable(val).map(Long::intValue).orElse(null)
Function<Long,Integer> function =?
लंबी x = 3120L; // किसी भी लंबे मान int z = x.intValue () को लें; // आप उसी तरह से डबल को भी इंट में कन्वर्ट कर सकते हैं
अगर आप सीधे गुप्त जरूरत है तो
longvalue.intvalue ();
Long l = 100;
int i = Math.round(l);
वसंत में, एक लंबे समय को अंतर में बदलने का एक कठोर तरीका है
न केवल lnog इंट में परिवर्तित हो सकता है, किसी भी प्रकार की क्लास फैली हुई संख्या सामान्य रूप से अन्य नंबर प्रकार में परिवर्तित हो सकती है, यहां मैं आपको दिखाऊंगा कि लंबे समय को इंट, अन्य प्रकार के विपरीत में कैसे परिवर्तित किया जाए।
Long l = 1234567L;
int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l, Integer.class);
