दिलचस्प पोस्ट
स्टोरीबोर्ड से UIView दृश्य से परे का विस्तार करने वाली एक UIScrollView में वस्तुओं को कैसे जोड़ें? वास्तव में माइक्रोसॉफ्ट विज़ुअल सी ++ के दो-चरण टेम्पलेट इंस्टाशन के साथ "टूटी हुई" क्या है? बुलियन सरणी के सभी मान सही हैं या नहीं, यह जांचने का सबसे शानदार तरीका क्या है? एचटीएमएल के लिए पाठ से बचें dbms_output.put_line स्टैक अतिप्रवाह प्रतिष्ठा प्रारूप के समान संख्याओं को प्रारूपित करने का तरीका <Ui: include>, टैग फ़ाइलें, संमिश्र घटकों और / या कस्टम घटकों का उपयोग कब करना है? 'सुपर' कीवर्ड के साथ जेनरिक बाउंडिंग कैसे स्थानीय HTML फ़ाइल UIWebView में लोड करने के लिए 7 वीं प्रविष्टि पर 6 से 1000+ तक SQL सर्वर 2012 कॉलम पहचान वृद्धि बढ़ रहा है क्रोम में विकल्प पेडिंग काम नहीं कर रहा है का चयन करें प्रोग्राम के लिए रूट विशेषाधिकार कैसे प्राप्त करें? क्लीअरकेज़ फायदे / नुकसान Bash में, मैं एक कमांड में फ़ंक्शन कुंजी कैसे बाँधूं? प्रोग्राम की मशीन पर कोर की संख्या का पता लगाएं

0.0 द्वारा विभाजित करते समय जावा एक अपवाद क्यों नहीं फेंकता?

मेरे पास 2 नंबरों के बीच प्रतिशत अंतर की गणना करने के लिए कोड है – (oldNum - newNum) / oldNum * 100; – जहां दोनों नंबर double हैं पुराने न्यूम 0 के मामले में मुझे कुछ प्रकार की जाँच / अपवाद प्रबंधन जोड़ने की उम्मीद थी। हालांकि, जब मैंने पुरानी न्यूज और न्यूम दोनों के लिए 0.0 के मानों के साथ एक परीक्षण किया था, तो निष्पादन जारी रहे क्योंकि अगर कुछ नहीं हुआ है और कोई त्रुटि नहीं हुई है। इस कोड को int के साथ चलाना निश्चित रूप से अंकगणित विभाजन-शून्य-शून्य अपवाद का कारण होगा। जब double एस की बात आती है तो जावा इसकी अनदेखी क्यों करता है?

वेब के समाधान से एकत्रित समाधान "0.0 द्वारा विभाजित करते समय जावा एक अपवाद क्यों नहीं फेंकता?"

शून्य से विभाजन का परिणाम, गणितीय बोलने वाला, अपरिभाषित है , जिसे फ्लोट / डबल के साथ व्यक्त किया जा सकता है (जैसा कि कोई संख्या नहीं है), लेकिन यह किसी भी मौलिक अर्थ में गलत नहीं है।

एक पूर्णांक के रूप में एक विशिष्ट संख्यात्मक मान होना चाहिए, उनके साथ काम करते समय त्रुटि को विभाजन से शून्य पर विभाजित किया जाना चाहिए।

जावा के float और double प्रकार, वहाँ से बाहर किसी भी अन्य भाषा की तरह (और बहुत ज्यादा किसी भी हार्डवेयर एफपी इकाई), फ्लोटिंग प्वाइंट मैथ के लिए आईईईई 754 मानक को लागू करते हैं, जो एक विशेष "अनन्तता" मान को वापस करने के लिए शून्य द्वारा विभाजन को जनादेश देता है। एक अपवाद फेंकना वास्तव में उस मानक का उल्लंघन करेगा

पूर्णांक अंकगणित (जावा और अधिकांश अन्य भाषाओं और हार्डवेयर द्वारा दो पूरक पूरक के रूप में लागू किया गया) अलग है और इसमें कोई विशेष अन्त्यता या NaN मूल्य नहीं है, इस प्रकार अपवाद फेंकने से वहां एक उपयोगी व्यवहार होता है।

जिस तरह से एक डबल संग्रहीत होता है वह एक int से काफी अलग होता है। जावा पर डबल गणना कैसे संभालती है, इसके बारे में अधिक विस्तृत व्याख्या के लिए http://firstclassthoughts.co.uk/java/traps/java_double_traps.html देखें। आपको फ्लोटिंग प्वाइंट नंबर पर भी पढ़ना चाहिए, खासकर नॉट नम्बर (एनएएन) की अवधारणा।

यदि आप फ़्लोटिंग बिंदु प्रतिनिधित्व के बारे में अधिक जानने में रुचि रखते हैं, तो मैं इस दस्तावेज़ को पढ़ने की सलाह दे रहा था (Word format, sorry)। यह संख्याओं के द्विआधारी प्रतिनिधित्व में है, जो आपकी समझ के लिए सहायक हो सकता है।

हालांकि जावा डेवलपर्स डबल आदिम प्रकार और Double क्लास के बारे में जानते हैं, जबकि फ्लोटिंग पॉइंट अंकगणित करते हुए वे Double Double.INFINITY , Double.INFINITY , Double.INFINITY और अन्य नियमों पर पर्याप्त ध्यान नहीं Double.INFINITY , जो कि उन्हें शामिल अंकगणितीय गणनाओं को नियंत्रित करते हैं।

इस प्रश्न का सरल उत्तर यह है कि यह ArithmeticException Double.INFINITY को नहीं फेंकता और Double.INFINITY वापस Double.INFINITYDouble.INFINITY इसके अलावा, ध्यान रखें कि तुलना x == Double.NaN हमेशा false मूल्यांकन करता false , भले ही x स्वयं एक x == Double.NaN है

जांचने के लिए कि क्या x एक Double.isNaN(x) तो यह देखने के लिए कि क्या दिया गया नंबर Double.isNaN(x) है या नहीं, यह विधि को Double.isNaN(x) कॉल में इस्तेमाल करना चाहिए। यह SQL में NULL बहुत निकट है

यह आपके लिए सहायक हो सकता है

शून्य से विभाजित होने पर (0 या 0.00)

  1. यदि आप 0 से द्विगुणित करते हैं, तो JVM इन्फिनिटी दिखाएगा।

    public static void main(String [] args){ double a=10.00; System.out.println(a/0); }

    कंसोल: Infinity

  2. अगर आप 0 से इंटरेस्ट करते हैं, तो जेवीएम अंकगणितीय अपवाद फेंक देगा।

    public static void main(String [] args){ int a=10; System.out.println(a/0); }

    कंसोल: Exception in thread "main" java.lang.ArithmeticException: / by zero

  3. लेकिन अगर हम 0.0 से इंटरेक्ट करते हैं, तो जेवीएम इन्फिनिटी दिखाएगा:

    public static void main(String [] args){ int a=10; System.out.println(a/0.0); }

    कंसोल: Infinity

इसका कारण यह है कि जेवीएम स्वचालित रूप से दोगुनी डाली जाएगा, इसलिए हमें अंकगणित अपवाद की जगह अनन्तता मिल जाएगी।