2012-12-02 21 views
14

में डबल्स विभाजित जब जब मैं 219 से 317 विभाजित 1.
उदाहरण के लिए:विषम व्यवहार युगल मैं का उपयोग कर जावा में जावा

double b = 317/219; 
System.out.println(b); 

आउटपुट है: 1.

इस क्योंकि यह है है एक पुनरावर्ती दशमलव? बदले में BigDecimal का उपयोग करना पड़ा जो परेशान है।

+0

आउटपुट 1.0 और अधिक सटीक होने के लिए 1.0 होगा –

+0

[जावा इंटीजर डिवीजन: हो का संभावित डुप्लिकेट क्या आप एक डबल उत्पादन करते हैं?] (http: // stackoverflow।com/प्रश्न/3144610/जावा-पूर्णांक विभाजन है कि कैसे करते हैं-आप पर उत्पादन एक डबल)। मैंने अपनी पसंद ली, लेकिन एसओ पर इस सवाल से कई बार पूछा जाता है। – demongolem

उत्तर

22

जावा में कोडित नंबर की इस

double b = 317/219D; 

डिफ़ॉल्ट प्रकार की कोशिश करो int है, कोड के साथ ऐसा तुम्हारे पास है के रूप में जावा दो int संख्या और विभाजन के परिणाम के साथ काम कर रहा है तो int भी होगा, जो 1 का अंतिम परिणाम देने के लिए दशमलव भाग को छोटा कर देगा। यह int परिणाम तब int 1 से double 1 पर संकलित चेतावनी के बिना डाला गया है क्योंकि यह कास्ट बढ़ रहा है (एक जहां स्रोत प्रकार को लक्ष्य प्रकार में "फिट" करने की गारंटी है)।

(आप भी d उपयोग कर सकते हैं, लेकिन मैं हमेशा अपर केस अक्षरों का उपयोग क्योंकि L लोअरकेस l के रूप में एक 1 तरह दिखता है) अनुगामी D साथ double के रूप में संख्या के दोनों कोडिंग करके, विभाजन का परिणाम double भी हो जाएगा ।

+1

अधिकतर अन्य उत्तर केवल फ्लोटिंग पॉइंट (डबल) अंकगणित करने के लिए '.0' चिपकते हैं, लेकिन यह उत्तर स्पष्ट रूप से दोनों ऑपरेटरों को डबल टाइप करने के लिए कहता है; एक सूक्ष्म लेकिन महत्वपूर्ण बिंदु! –

+0

मुझे यकीन था कि मैं दो बार कास्टिंग करने की कोशिश करता था! मान लीजिए कि मैं सिर्फ बेवकूफ था। सहायता के लिए धन्यवाद! – Joe

3

ऐसा इसलिए है क्योंकि आपने पूर्णांक अक्षर का उपयोग किया है, इसलिए आप एक पूर्णांक विभाजन कर रहे हैं।

इसके बजाय double b = 317.0/219.0; लिखने का प्रयास करें।

0

यह int विभाजित है। लिखें:

double b = 317.0/219; 
System.out.println(b); 
0

चूंकि आपके द्वारा डाली गई संख्याएं हैं, इसलिए उत्तर है।

double b = 317.0/219; 
System.out.println(b); 

या:

double b = ((double)317)/219; 
System.out.println(b); 
2

यह उल्लेख के लायक है कोई विभाजन है कि
दोगुना आप चल बिन्दु के साथ एक नंबर का उपयोग करने के लिए या पूर्णांकों आप उपयोग में से एक कास्ट करने के लिए या तो की जरूरत है पाने के लिए रनटाइम पर आपके उदाहरण में। 317/21 9 की गणना संकलन-समय पर की जाती है (पूर्णांक विभाजन, अंश त्याग दिया जाता है) और स्थिर के साथ प्रतिस्थापित किया जाता है। आप .class डिकंपाइल हैं (मैं Jad http://www.kpdus.com/jad.html प्रयुक्त) आप

double b = 1.0D; 
5

एक अन्य विकल्प ...

double b = (double)317/219; 
-2

देखेंगे आप की कोशिश कर सकते

double b = 0.0; 
b = 317/219; 

ताकि मैं दशमलव लौट सकते हैं बिंदु

+0

यह सही जवाब नहीं है। दोनों 317 और 21 9 int हैं इसलिए परिणाम विभाजन का एक हिस्सा होगा, इससे कोई फर्क नहीं पड़ता कि पैरामीटर प्रकार क्या है। – zohar

+0

कई चीजें हो सकती हैं जो आप उपरोक्त के अलावा अन्य कोशिश कर सकते हैं। हालांकि @ जो को समझ में समस्या हो रही थी कि जावा में अंकगणित सामग्री कैसे काम करती है। यह बिल्कुल जवाब नहीं होना चाहिए। – prageeth

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