2013-08-08 9 views
22

मैं विंडोज़ में प्रयुक्त डिस्कस्पेस के% की गणना करने की कोशिश कर रहा हूं और कुल मिलाकर लांग में लांग और फ्रीड्रिव डेंटोज़ फ्री स्पेस में सी ड्राइव के कुल डिस्क को दर्शाता है।लंबे रिटर्न से लंबे समय तक विभाजित 0

long totaloccupied = totaldrive - freedrive; 

यहाँ की गणना उपयोग

Long Percentageused =(totaloccupied/totaldrive*100); 
System.out.println(Percentageused); 

प्रिंट बयान देता है 0. किसी की मदद कर सकते हैं के रूप में मैं वांछित मान

+6

हे। यह एक लंबा दिन था कि मैंने नदी के नीचे एक फ्लोट का आनंद लिया ... – cabbagery

+1

आप 'long' के बजाय' Long' का उपयोग क्यों कर रहे हैं? साथ ही, कृपया 'प्रतिशतUsed' के लिए जावा नामकरण सम्मेलनों को देखें। – wchargin

उत्तर

42

आप शायद लंबे समय से लंबे समय तक विभाजित कर रहे हैं, जो लंबे समय तक (लंबे/लंबे = लंबे) ऑपरेशन को संदर्भित करता है, जिससे एक लंबा परिणाम (आपके मामले में 0) होता है।

आप या तो विभाजन के संचालन को एक फ्लोट प्रकार में कास्टिंग करके एक ही चीज़ प्राप्त कर सकते हैं।

Long Percentageused = (long)((float)totaloccupied/totaldrive*100); 
1

बाएं से दाएं मूल्यांकन किया जाएगा यही कारण है, पहले नहीं मिल रहा है की% पूर्णांक विभाजन 0 लौटाएगा (उदाहरण के लिए 8/10 मूल्यांकन 0)। या तो मूल्यों को फ़्लोट में परिवर्तित करें या 100 * ए/बी करें। फ़्लोट आपको एक अधिक सटीक परिणाम देगा।

+0

'फ्लोट' नहीं होगा * यदि संख्या शामिल है तो अधिक सटीक परिणाम दें। – paddy

+0

यदि आप करते हैं (फ्लोट) (100 * ए)/(फ्लोट) बी। दोनों पक्ष परिमाण के अपेक्षाकृत छोटे क्रम से भिन्न होंगे, जहां सबसे सटीक नुकसान होता है। –

+1

बीटीडब्ल्यू, जो भी यहां से नीचे और नीचे आया, हर जवाब यहां मतदान किया, कृपया एक रचनात्मक टिप्पणी छोड़ दें। –

4

आप पूर्णांक विभाजन कर रहे हैं! चूंकि totaloccupiedtotaldrive से छोटा है, दोनों का विभाजन 0 उत्तर देता है। आप पहली बार दोगुना करने के लिए परिवर्तित करना चाहिए:

double percentageUsed = 100.0 * totalOccupied/totalDrive; 

नोट 100 को दशमलव बिंदु जोड़ने सुनिश्चित करता है कि यह एक double माना जाता है।

+0

यदि कुल निष्पादित और कुल ड्राइव दोनों लंबे हैं, तो 100.0 तक गुणा करने के परिणामस्वरूप 0.0 –

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