जावा में पूर्णांक में डबल परिवर्तित करना


114

जावा में, मैं एक डबल को पूर्णांक में बदलना चाहता हूं, मुझे पता है कि क्या आप ऐसा करते हैं:

double x = 1.5;
int y = (int)x;

आपको y = 1 मिलता है। अगर तुम यह करते हो:

int y = (int)Math.round(x);

आपको संभावना मिल जाएगी 2. हालांकि, मैं सोच रहा हूं: चूंकि पूर्णांकों के दोहरे प्रतिनिधित्व कभी-कभी 1.9999999998 या कुछ और जैसे दिखते हैं, क्या ऐसी संभावना है कि Math.round () के माध्यम से बनाए गए डबल कास्ट करने के बाद भी परिणाम कम हो जाएगा, बल्कि राउंडेड संख्या की तुलना में हम (यानी: 1 के बजाय कोड में 2 का प्रतिनिधित्व करते हैं)?

(और हां, मेरा मतलब है कि यह इस तरह है: क्या एक्स के लिए कोई मूल्य है, जहां y एक परिणाम दिखाएगा जो x के एक गोल प्रतिनिधित्व के बजाय एक छोटा है?)

यदि हां: तो क्या ट्रंकेशन के जोखिम को चलाने के बिना एक गोल इंट में डबल बनाने का एक बेहतर तरीका है?


कुछ पता लगाया: Math.round (x) एक लंबा रिटर्न देता है, एक डबल नहीं। इसलिए, 3.9999998 जैसी दिखने वाली संख्या को वापस करना Math.round () के लिए असंभव है। इसलिए, int (Math.round ()) को कभी भी किसी चीज़ को अलग करने की आवश्यकता नहीं होगी और हमेशा काम करेगा।


6
Math.round (डबल) एक लंबा रिटर्न देता है, एक डबल नहीं।
१३:५

जवाबों:


95

क्या कोई संभावना है कि एक डबल के माध्यम से बनाई गई कास्टिंग Math.round()अभी भी नीचे की संख्या में कम हो जाएगी

नहीं, round()हमेशा अपने डबल को सही मूल्य पर गोल करेगा, और फिर, यह longकिसी भी दशमलव स्थानों को काट देगा , जिसे कास्ट किया जाएगा। लेकिन गोलाई के बाद, कोई भिन्नात्मक भाग शेष नहीं रहेगा।

यहाँ से डॉक्स हैं Math.round(double):

निकटतम लंबे तर्क पर लौटता है। परिणाम 1/2 को जोड़कर एक पूर्णांक तक गोल किया जाता है, परिणाम का फर्श लेता है, और परिणाम को लंबे समय तक टाइप करने के लिए कास्टिंग करता है। दूसरे शब्दों में, परिणाम अभिव्यक्ति के मूल्य के बराबर है:

(long)Math.floor(a + 0.5d)

3
महत्वपूर्ण बिंदु यह है कि गोलाई गोल विधि के भीतर की जाती है। एक लंबा मान लौटाया जाता है, जिसे सुरक्षित रूप से एक इंट में डाला जा सकता है (यह माना जाता है कि लौटा मूल्य हमेशा इंट रेंज में होगा)।
13 रॉबर्ट

हाँ। समस्याओं को देने के लिए / a / long / int की कल्पना नहीं कर सकते। जाहिर है! यह पता
लगाना

1
हालांकि यह सच है कि गोलाई के कारण ट्रंकेशन नहीं होगा, फिर भी आपको केवल डबल से कास्टिंग के कारण अपेक्षित परिणाम नहीं मिल सकते हैं, जो कि [max double: 1.7976931348623157E308]इंट की बहुत बड़ी संख्या है जो कि बहुत छोटी है [max int: 2147483647]। सिर्फ मन में रखने वाली कुछ बातें।
नेल्दा.टेकस्पैरेस

22

डेटाटाइप के Doubleलिए int, आप निम्न का उपयोग कर सकते हैं:

Double double = 5.00;

int integer = double.intValue();

वह एक गोल मूल्य की तलाश में है।
लोर्ने की

1
मुझे नहीं लगता कि आप 4.99999999999 की उम्मीद करेंगे (4 नहीं 5 देंगे)
murkle

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.