जावा के साथ फ्लोट को इंट में कैसे बदलें


342

मैंने फ्लोट को इंट में बदलने के लिए निम्नलिखित लाइन का उपयोग किया, लेकिन यह उतना सटीक नहीं है जितना मैं चाहूंगा:

 float a=8.61f;
 int b;

 b=(int)a;

परिणाम है: 8(यह होना चाहिए 9)

जब a = -7.65f, परिणाम है: -7(यह होना चाहिए -8)

इसे करने का सबसे अच्छा तरीका क्या है?


16
मुझे यह बताना चाहिए कि बस टाइपकास्टिंग मूल्य को कम करता है और मूल्य पर कोई भी गोल / फ़्लोरिंग संचालन नहीं करता है।
ब्रायन ग्राहम

जवाबों:


678

का उपयोग करते Math.round()हुए फ्लोट को निकटतम पूर्णांक तक गोल किया जाएगा।


1
Math.round () के बाद टाइपकास्ट की आवश्यकता क्यों है?
necromancer

81
Math.round()रिटर्न intमान इसलिए टाइपकास्टिंग का उपयोग (int)बेमानी है।
१२

5
/ या का उपयोग करें ... (int)fooसरल है।
युतधाममो

31
सॉल्वैक का जवाब सही है, लेकिन मैं यह बताना चाहूंगा कि इनपुट के आधार पर Math.round () में दो अलग-अलग आउटपुट प्रकार हो सकते हैं। Math.round (डबल ए) एक लंबा रिटर्न देता है। Math.round (float a) एक int देता है। docs.oracle.com/javase/7/docs/api/java/lang/…
होसोउगी

2
Math.round () (int) को कास्टिंग करने की तुलना में एक धीमा ऑपरेशन है
darkgaze

186

दरअसल, फ्लोट को डाउन करने के अलग-अलग तरीके हैं, जो आप प्राप्त करना चाहते हैं उसके परिणाम के आधार पर: (उदाहरण के लिए i, फ्लोट f)

  • गोल (निकटतम पूर्णांक फ्लोट को दिया गया)

    i = Math.round(f);
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  2 ; f =  2.68 -> i =  3
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -3

    नोट: यह अनुबंध के बराबर है (int) Math.floor(f + 0.5f)

  • छोटा करें (यानी दशमलव डॉट के बाद सब कुछ छोड़ दें)

    i = (int) f;
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  2 ; f =  2.68 -> i =  2
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
  • छत / मंजिल (एक पूर्णांक हमेशा दिए गए मूल्य से बड़ा / छोटा होता है, यदि इसका कोई आंशिक भाग होता है)

    i = (int) Math.ceil(f);
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  3 ; f =  2.68 -> i =  3
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
    
    i = (int) Math.floor(f);
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  2 ; f =  2.68 -> i =  2
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -3 ; f = -2.68 -> i = -3

सकारात्मक मूल्यों को गोल करने के लिए , आप बस उपयोग कर सकते हैं (int)(f + 0.5), जो Math.Roundउन मामलों में ठीक उसी तरह काम करता है (जैसा कि डॉक्टर के अनुसार)।

तुम भी उपयोग कर सकते हैं Math.rint(f)करने के लिए भी पूर्णांक निकटतम करने के लिए राउंडिंग ; यकीनन यह उपयोगी है यदि आप आंशिक रूप से भिन्न फ़्लोट के साथ बहुत से निपटने की उम्मीद करते हैं ।5 (बराबर IEEE राउंडिंग मुद्दों पर ध्यान दें), और सेट के औसत को यथावत रखना चाहते हैं; आप एक और पूर्वाग्रह का परिचय देंगे, जहाँ विषम से भी अधिक संख्याएँ समान होंगी।

देख

http://mindprod.com/jgloss/round.html

http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html

अधिक जानकारी और कुछ उदाहरणों के लिए।


rint बैंकर की गोलाई है; यह उन त्रुटियों को कम करने में मदद करता है जो दिखाई दे सकती हैं यदि आप लगातार 0.5 अप या डाउन राउंड करते हैं।
prosfilaes

@prosfilaes मैंने शब्दों को बदल दिया है और उत्तर के उस भाग में एक विकी लिंक जोड़ दिया है।


6

Math.round भी पूर्णांक मान लौटाता है, इसलिए आपको टाइपकास्ट करने की आवश्यकता नहीं है।

int b = Math.round(float a);

14
अन्य उत्तर पहले से ही यह कहते हैं। कृपया केवल एक नया उत्तर जोड़ें जब आपके पास जोड़ने के लिए कुछ नया हो। (इसके अलावा,
Math.round

1
वह बिना किसी टाइपकास्ट (सचित्र जवाब के) के बारे में स्पष्टीकरण देता है। लेकिन इसे टिप्पणी के रूप में परिवर्तित किया जा सकता है।
रंजीत कुमार

5

का प्रयोग करें Math.round(value)तो बाद प्रकार पूर्णांक के लिए यह डाली।

float a = 8.61f;
int b = (int)Math.round(a);

Math.round (float) एक int लौटाता है, मुझे यकीन नहीं है कि int कास्ट आवश्यक क्यों है
Nephilim

-1

मेरे लिए, आसान: (int) (a +.5) // a एक फ्लोट है। वापस गोल मूल्य।

Java Math.round () प्रकारों पर निर्भर नहीं है


4
यह बहुत से डेवलपर्स को भ्रमित करेगा जो कोड का विश्लेषण करते हैं। यह स्पष्ट नहीं होगा कि यह गोल है।
ivan.panasiuk

1
बेशक, यह सिर्फ बुनियादी गणित है, बस कोशिश करो
ब्रूनो एल।

4
"मूल गणित" एक सापेक्ष शब्द है। :) अपने अनुभव से, मैं शर्त लगा सकता हूं कि 50% से अधिक डेवलपर्स यह नहीं समझेंगे कि यह वास्तव में गोल है। यह गणितीय रूप से सही है, लेकिन जैसा कि मैंने लिखा है, यह स्पष्ट नहीं है और दूसरों के लिए यह समझना कठिन है कि कोड क्या करता है।
ivan.panasiuk

2
-(int) ( PI / 3 ): एक नकारात्मक के साथ अपने कोड की कोशिश a... जब से -0.5दौर के लिए 0?

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