एक अभिन्न प्रकार टी करने के लिए एक फ्लोटिंग प्वाइंट नंबर की एक संकुचन रूपांतरण दो कदम उठा लेता:
पहले चरण में, फ्लोटिंग प्वाइंट नंबर एक लंबे समय तक या तो बदल जाती है , यदि टी लंबा है, या एक int, यदि टी बाइट, शॉर्ट, चार, या int, निम्नानुसार है:
यदि फ़्लोटिंग-पॉइंट नंबर NaN (§4.2.3) है, तो परिणाम कनवर्टर के पहले चरण सायन, 0.
अन्यथा किसी पूर्णांक या लंबी है अगर फ्लोटिंग प्वाइंट नंबर एक अनन्तता नहीं है, फ्लोटिंग प्वाइंट मान एक पूर्णांक मूल्य वी के लिए गोल है, शून्य आईईईई 754 राउंड toward- का उपयोग कर की ओर गोलाई शून्य मोड (§4.2.3)। तब दो मामलों देखते हैं:
तो टी लंबा है, और इस पूर्णांक मान एक लंबे के रूप में प्रतिनिधित्व किया जा सकता है, तो पहला कदम का परिणाम लंबे मूल्य वी
अन्यथा, इस पूर्णांक अगर मूल्य एक पूर्णांक के रूप में प्रतिनिधित्व किया जा सकता है, तो पहला कदम का परिणाम पूर्णांक मूल्य वी है
अन्यथा, निम्नलिखित दो मामलों में से एक सत्य होना चाहिए:
मान बहुत छोटा होना चाहिए (एक बड़ी परिमाण याका नकारात्मक मूल्यनकारात्मक अनंतता), और पहले चरण का परिणाम सबसे छोटा प्रकार int या लंबे प्रकार का प्रतिनिधित्व करने योग्य मान है।
मान बहुत बड़ा होना चाहिए, और पहला कदम का परिणाम (बड़े परिमाण या सकारात्मक अनंत का एक सकारात्मक मूल्य) प्रकार int या लंबे समय के सबसे बड़े प्रदर्शनीय मूल्य है।
दूसरे चरण में:
तो टी पूर्णांक या लंबा है, रूपांतरण के परिणाम पहला कदम का परिणाम है।
तो टी बाइट, चार, या कम है, रूपांतरण के परिणाम टाइप करने के लिए एक संकुचन रूपांतरण के परिणाम टी है (§5.1.3) पहला कदम के परिणाम की।
मुझे लगता है कि यह एक 'int' और फिर' बाइट 'पर कास्टिंग कर रहा है नोट: Integer.MAX_VALUE इंफिनिटी के लिए' int 'के निकटतम मूल्य है। –
Thx पीटर, लेकिन 'long' करने के लिए Integer.MAX_VALUE कास्टिंग हमें केवल '2147483647L' देगा, क्या मैं सही हूँ? –
@ पीटर Lawrey '(1.0/0) 'के लिए' डबल 'के रूप में मूल्यांकन किया जाना संभव नहीं होगा, और फिर जाति के लिए जाति नीचे 8 बिट्स पर विचार करें? जबकि आईईईई 754 मानक को 'डबल' और 'फ्लोट' के लिए परिभाषित करता है, मुझे यह अजीब लगता है कि हस्ताक्षर बिट 'int' के लिए 0 है क्योंकि दस्तावेज़ 'int' के लिए अनंत चश्मा परिभाषित नहीं करते हैं। –