निम्न गणना नकारात्मक मान क्यों उत्पन्न करती है?जावा में गुणात्मक संचालन के परिणामस्वरूप नकारात्मक मान
long interval = 0;
interval = ((60000 * 60) * 24) * 30;
निम्न गणना नकारात्मक मान क्यों उत्पन्न करती है?जावा में गुणात्मक संचालन के परिणामस्वरूप नकारात्मक मान
long interval = 0;
interval = ((60000 * 60) * 24) * 30;
हर अभिव्यक्ति मूल्यांकन किया जा रहा है में; int * int
बजाय long * long
के रूप में (संकलन समय पर, निश्चित रूप से यह एक निरंतर है)। नतीजा कुछ बिंदु पर बहती है। तो बस सब संकार्य शाब्दिक लंबे बनाने के लिए L
का उपयोग करें:
interval = ((60000L * 60L) * 24L) * 30L;
बेशक
आप दूर केवल ऑपरेंड देशांतर के कुछ बनाने के साथ मिल सकता है, लेकिन मैं इसे आसान है बस सब कुछ बदलने के खोजने के लिए करते हैं।
, यह सब कहा करने के बाद आप "मिलीसेकेंड के 30 दिनों के लायक" इसका इस्तेमाल करने के लिए बेहतर होगा देख रहे हैं:
long interval = TimeUnit.DAYS.toMillis(30);
क्योंकि समीकरण के मूल्य इतने बड़े होते हैं कि यह चारों ओर लपेटता है, इसके परिणामस्वरूप यह एक इंटीजर होगा। Int
इस प्रयास करें, यह नकारात्मक नहीं होगा:
long interval = 0;
interval = ((60000L * 60L) * 24L) * 30L;
क्यों 'अंतराल = 0; '? –
@प्रशांत भेट - बस ओपी के कोड की प्रतिलिपि बनाई गई :) 'अंतराल = 0; 'बिल्कुल आवश्यक नहीं है। – adarshr
आपका मान 2592000000 है जो अधिकतम हस्ताक्षरित पूर्णांक मान 2^31 (2147483648) से बड़ा है। इसे पूर्णांक ओवरफ़्लो कहा जाता है, परिणाम नकारात्मक में बहता है।
गणना को कई चरणों में अलग करें और इसे डीबगर में ट्रैक करें। यह प्रदर्शित करना चाहिए कि यह कहां गलत हो जाता है। –