2011-02-08 16 views
37
int totalOptCount = 500; 
int totalRespCount=1500; 
float percentage =(float)(totalOptCount/totalRespCount); 

यह हमेशा मान मान वापस 0.0 क्यों करता है? इसके अलावा मैं इसे 00.00 प्रारूप में प्रारूपित करना और स्ट्रिंग में परिवर्तित करना चाहता हूं?जावा में दो पूर्णांक का विभाजन 0.0 क्यों देता है?

उत्तर

78

क्योंकि विभाजन के बाद फ्लोट में रूपांतरण होता है। आप की जरूरत है:

float percentage = ((float) totalOptCount)/totalRespCount; 

आप की तरह कुछ का उपयोग कर फ़ॉर्मेट करने के लिए सक्षम होना चाहिए:

String str = String.format("%2.02f", percentage); 
+0

फ़्लोट (प्रतिशत)) इस फ्लोट में एक त्रुटि – kiran

+0

स्ट्रिंग स्ट्र = स्ट्रिंग.फॉर्मैट ("% 2.02f", (फ्लोट) प्रतिशत) दिखाती है; इस तरह बदल गया। यह काम किया, धन्यवाद – kiran

1
String.format("%2.02f", (float)totalOptCount/totalRespCount); 
+0

यह स्टोर करता है, जिसमें परिवर्तनीय – kiran

+0

अवांछित कोड को देखो, यह बेहतर समझाया गया है। मेरा कोड सिर्फ आपको यह बताने के लिए था कि इसे एक पंक्ति में कैसे किया जाए, यदि आप – Dalmas

2
जावा में

पूर्णांक विभाजन (जो लंबे, लघु, बाइट, चार, पूर्णांक भी शामिल है) हमेशा एक रिटर्न int (या लंबा, यदि पैरामीटर में से एक लंबा है), शून्य की तरफ गोल करना। आपका रूपांतरण इस गणना के बाद होता है।

-

8

आप int मानों का उपयोग कर रहे हैं, तो (स्वरूपण सवाल पहले से ही अन्य उत्तर से उत्तर दिया जाता है वैकल्पिक रूप से आप भी java.text.NumberFormat पर एक नज़र, विशेष रूप से java.text.DecimalFormat हो सकता था।) का उपयोग double एक बेहतर विकल्प हो सकता है और कम गोलिंग त्रुटि हो सकती है। float ~ 16 मिलियन तक की त्रुटि के बिना int मानों का प्रतिनिधित्व कर सकते हैं। double सभी int मानों का सटीक रूप से प्रतिनिधित्व कर सकते हैं।

double percentage =(double) totalOptCount/totalRespCount; 

प्रतिशत आमतौर पर 100 से गुणा हो जाते हैं, जिसका अर्थ है कि आप कास्ट छोड़ सकते हैं।

double percentage = 100.0 * totalOptCount/totalRespCount; 
+0

चाहते हैं तो परिणाम को एक चर में संग्रहीत कर सकते हैं 100 से 100.0 बदलना चाल है, वह क्यों है? मैं डबल का उपयोग कर रहा हूँ। – luizfelippe

+1

@luizfelippe एक आम गलती एक पूर्णांक ऑपरेशन करना है और परिणाम को डबल या फ्लोट पर डालना है। आपको ऑपरेशन को डबल i.e. '(डबल) (ए/बी) 'के रूप में करने की आवश्यकता है, जब' ए' और' बी 'पूर्णांक होते हैं, तो' (डबल) ए/बी' जैसा नहीं है, आप बाद में चाहते हैं। –

1

एक डबल प्रारूपित करके एक प्रतिशत के रूप में बाहर मुद्रित करने के लिए, आप उपयोग

System.out.println(new DecimalFormat("##.##").format(yourDouble) + "%")); 
0

(totalOptCount/totalRespCount)

यहाँ

दोनों लाभांश और भाजक जिसका अर्थ है प्रकार int के हैं उपयोग कर सकते हैं वे केवल पूर्णांक मानों की अनुमति देंगे और इस तरह के समीकरण का उत्तर हमेशा एक पूर्णांक अक्षर होगा।

अगर मैं इस तोड़ ऐसा

नीचे

(double)(500/1500)

वास्तविक गणना के अनुसार, 500/1500 आप 0 दे देंगे कुछ हो जाएगा।33333 लेकिन संकलक

(double)(0)


संकलक इस 0 मूल्य कास्ट करने के लिए एक अनुदेश हो जाता है तो दोगुना करने के लिए, क्योंकि दोनों ऑपरेंड प्रकार int के हैं पूर्णांक शाब्दिक में परिवर्तित कर देंगे आप परिणाम के रूप में 0.0 मिला

0.0

और फिर आप परिणाम को किसी भी प्रारूप में बदल सकते हैं जैसे @Zach Janicki द्वारा suggeted।

ध्यान रखें कि दोनों ऑपरेंड परिणाम के मुकाबले एक ही प्रकार के होते हैं।

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