/ / जावा पूर्णांक-डबल डिवीजन भ्रम [डुप्लिकेट] - जावा

जावा पूर्णांक-डबल विभाजन भ्रम [डुप्लिकेट] - जावा

कार्यक्रम 1

int sum = 30;
double avg = sum / 4; // result is 7.0, not 7.5 !!!

बनाम

कार्यक्रम 2

int sum= 30
double avg =sum/4.0 // Prints lns 7.5

क्या ऐसा इसलिए है क्योंकि प्रोग्राम 1 में "4" एक शाब्दिक पूर्णांक के रूप में काम कर रहा है? इसलिए 30/4 मुझे देगा 7. हालाँकि यह डेटा प्रकार एक डबल है, हमें अंत में एक .0 जोड़ने की आवश्यकता है। तो "7.0"

कार्यक्रम 2 में 4 हैं।0 जो कि शाब्दिक डबल के रूप में काम कर रहा है। एक इंट / डबल हमेशा डबल देगा क्योंकि यह अधिक सटीक है। इसलिए हमें "7.5" मिलता है। मैं यह नहीं समझता कि दोहरे डेटा प्रकार परिणाम के लिए क्या कर रहे हैं .. हालांकि यह वास्तव में कुछ भी करने की आवश्यकता नहीं है क्योंकि डबल डेटा प्रकार की शर्तें पहले से ही संतुष्ट हैं (गणना के बाहर सबसे सटीक परिणाम है)।

क्या मै गलत हु? मैं तुम्हें सही करने के लिए प्रोत्साहित करता हूँ! यह मैं कैसे सीखता हूँ .. :)

उत्तर:

उत्तर № 1 के लिए 4

यह एक पूर्णांक विभाजन है (क्योंकि इसमें दो पूर्णांक शामिल हैं)

int sum = 30;
double avg = (sum / 4); // result is 7

पूर्णांक विभाजन, निकटतम पूर्णांक तक गोल हो जाएगा।

हालाँकि, यह एक डबल डिवीजन है (क्योंकि 4.0 एक डबल है)

int sum= 30
double avg = (sum/4.0) //  result is 7.5

यह अपेक्षित व्यवहार है, और रूपांतरण सभी अच्छी तरह से परिभाषित हैं। अनुमान लगाने की जरूरत नहीं। देख लेना जावा दस्तावेज़ रूपांतरण के बारे में।

एक इंट या लंबे मूल्य का एक व्यापक रूपांतरणतैरने के लिए, या एक लंबे समय तक मूल्य दोगुना हो सकता है, जिसके परिणामस्वरूप सटीकता की हानि हो सकती है - अर्थात, परिणाम मूल्य के कुछ महत्वपूर्ण बिट्स खो सकते हैं। इसमें मामला, परिणामस्वरूप फ्लोटिंग-पॉइंट वैल्यू एक सही ढंग से गोल होगा आईईईई 754 राउंड-टू-निकटतम मोड का उपयोग करके पूर्णांक मान का संस्करण


जवाब के लिए 3 № 2

अपने पहले उदाहरण में:

int sum = 30;
double avg = sum / 4; // result is 7.0, not 7.5 !!!

sum एक इंट, और है 4 एक इंट भी है। जावा एक पूर्णांक को दूसरे से विभाजित कर पूर्णांक परिणाम प्राप्त कर रहा है। यह सब होता है से पहले यह मान प्रदान करता है double avg, और तब तक आप पहले से ही दशमलव बिंदु के दाईं ओर सभी जानकारी खो चुके हैं।

कुछ कास्टिंग का प्रयास करें।

int sum = 30;
double avg = (double) sum / 4; // result is 7.5

या

int sum = 30;
double avg = sum / 4.0d; // result is 7.5

उत्तर № 3 के लिए 1

जावा में, संचालन शामिल हैं केवल पूर्णांक प्रकार (int, long and so) के पास है पूर्णांक परिणाम। इसमें विभाग शामिल हैं।

30 और 4 दोनों पूर्णांक मान हैं, इसलिए यदि आप उन्हें विभाजित करने का प्रयास करते हैं, पूर्णांक विभाजन का उपयोग किया जाता है।

लेकिन अगर आप या तो कोशिश करते हैं 30.0/4 या 30/4.0 तो परिणाम होगा 7.5 क्योंकि आप उपयोग कर रहे होंगे तैरनेवाला स्थल विभाजन।

चर का घोषित प्रकार avg परिणाम पर कोई प्रभाव नहीं है। दशमलव भाग विभाजन के दौरान खो जाता है, न कि जब आप वैरिएबल को मान असाइन करते हैं।


जवाब के लिए 0 № 4

यहां छवि विवरण दर्ज करें

से ली गई छवि: http://www.mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/mixed.html

अधिक स्पष्ट स्पष्टीकरण के लिए URL से ऊपर का संदर्भ लें।


जवाब के लिए 0 № 5

कार्यक्रम 1 जावा में, जब आप बीच में एक विभाजन करते हैंदो पूर्णांक, परिणाम एक पूर्णांक है। इसलिए जब आप योग / 4 करते हैं, तो परिणाम पूर्णांक 7 होता है। फिर आप उस पूर्णांक को दोहरे चर पर नियत करते हैं, जिससे 7 7.0 में बदल जाते हैं।

कार्यक्रम 2 जावा में, जब आप एक विभाजन करते हैंएक पूर्णांक और एक डबल के बीच, परिणाम एक डबल है। इसलिए जब आप योग / 4.0 करते हैं, तो परिणाम डबल 7.5 होता है। फिर आप इसे डबल वैरिएबल में असाइन करते हैं, इसलिए यह अभी भी 7.5 है।

तो समस्या यह नहीं है कि प्रिंटलाइन चर को कैसे प्रिंट करती है, बल्कि जावा में विभाजन कैसे काम करता है