2013-05-15 8 views
6

मैं नहीं समझ सकता क्यों यहनाव प्रकार परिशुद्धता

float f = Integer.MAX_VALUE; 
System.out.println(Integer.MAX_VALUE); 
System.out.println((int)f); 

उसी तर्ज पैदा करता है के बारे में,

साथ ही ऐसा क्यों करता है

Float f2 = (float) Integer.MAX_VALUE; 
System.out.println(Integer.MAX_VALUE); 
System.out.println(f2.intValue()); 

मेरा मतलब है चल के लिए, अपूर्णांश लंबाई

बिंदु संख्या 2^23-1 है। यह पूर्णांक का max_value रखने का प्रबंधन कैसे करता है, जो 2^31 - 1 है?

+0

बीटीडब्ल्यू 'फ्लोट' का उपयोग न करें, आप इससे बच सकते हैं। 'डबल' आपको सटीकता के आधा ट्रिलियन गुना देता है। कुछ सुझाव देते हैं कि आपको BigDecimal (हालांकि मेरी वरीयता नहीं) –

+0

का उपयोग करना चाहिए, यह नमूना सिर्फ नमूना के लिए है। असली जीवन कोड नहीं है। – dhblah

+0

सच है, आप Long.MAX_VALUE और डबल के साथ समान तुलना कर सकते हैं। –

उत्तर

8

यह पूर्णांक का max_value रखने के लिए कैसे प्रबंधित करता है, जो 2^31 - 1 है?

यह वास्तव में नहीं करता है। f का मान 2147483648 है।

हालांकि, narrowing primitive conversionfloat से int मूल्यों को क्लैंप करता है।

  • अन्यथा, निम्नलिखित दो मामलों में से एक सत्य होना चाहिए:: यह इस हिस्से के लिए हो जाता है

    • मान बहुत छोटा (बड़े परिमाण या नकारात्मक अनन्तता का एक नकारात्मक मूल्य होना चाहिए), और पहले चरण का परिणाम int int या long का सबसे छोटा प्रतिनिधित्व योग्य मान है।

    • मान बहुत बड़ा होना चाहिए (बड़ी परिमाण या सकारात्मक अनंतता का सकारात्मक मूल्य), और पहले चरण का परिणाम int या लंबे प्रकार का सबसे बड़ा प्रतिनिधित्व करने योग्य मान है।

आप संख्या भी बड़ा बना कर यह आसानी से देख सकते हैं:

float f = Integer.MAX_VALUE; 
f = f * 1000; 
System.out.println(Integer.MAX_VALUE); // 2147483647 
System.out.println((int)f); // 2147483647 

या बजाय long के कास्टिंग, जो स्पष्ट रूप से एक ही समय में आबद्ध किया की जरूरत नहीं है द्वारा बिंदु:

float f = Integer.MAX_VALUE; 
System.out.println(Integer.MAX_VALUE); // 2147483647 
System.out.println((long)f); // 2147483648 
+1

और उदाहरण के लिए मुझे यही मिलता है http://ideone.com/p1pZnE पहले :) –

+0

@dionadar: मुझे इसके बजाय 'long'' कास्टिंग करने का आपका विचार पसंद है। यह मेरे जवाब में जोड़ देगा, अगर यह आपके साथ ठीक है। –

+1

बेशक! इसका उद्देश्य ओपी के बाद सभी की मदद करना था। –

संबंधित मुद्दे