2010-09-13 12 views
5

में सरल गणित समस्या मेरे पास यह प्रोग्राम है जो प्रत्येक संभव 200 में से 3 अंक लेता है, फिर औसत प्राप्त करना और प्रतिशत प्रदर्शित करना माना जाता है। लेकिन जब मैं इनपुट नंबर करता हूं तो मुझे जवाब के रूप में 00.0 मिलता है। मैं गलत क्या कर सकता था?सी #

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int Score1; 
      int Score2; 
      int Score3; 

      Console.Write("Enter your score (out of 200 possible) on the first test: "); 

      Score1 = int.Parse(Console.ReadLine()); 
      Console.Write("Enter your score (out of 200 possible) on the second test: "); 

      Score2 = int.Parse(Console.ReadLine()); 
      Console.Write("Enter your score (out of 200 possible on the third test: "); 

      Score3 = int.Parse(Console.ReadLine()); 
      Console.WriteLine("\n"); 

      float percent = ((Score1+ Score2+ Score3)/600); 

      Console.WriteLine("Your percentage to date is: {0:00.0}", percent); 
      Console.ReadLine(); 
     } 
    } 
} 

उत्तर

17

आप एक पूर्णांक द्वारा एक पूर्णांक विभाजित कर रहे हैं -, कि हमेशा पूर्णांक गणित का उपयोग करता है भले ही आप किसी float लिए परिणाम बताए जा रहे हैं। इसे ठीक करने का सबसे आसान तरीका ऑपरेटरों में से एक को एक फ्लोट बनाना है, उदा।

float percent = (Score1 + Score2 + Score3)/600f; 

ध्यान दें कि यह वास्तव में आप एक प्रतिशत हालांकि नहीं देंगे - यह आप (यह मानते हुए आदानों 0 और 200 के बीच है) 0 और 1 के बीच एक नंबर दे देंगे।

वास्तविक प्रतिशत पाने के लिए आपको 100 से गुणा करने की आवश्यकता है - जो केवल 6 से भाग के बराबर है:

float percent = (Score1 + Score2 + Score3)/6f; 
+4

वूट? आप इसे 33 सेकंड से कम समय में टाइप करने में सक्षम कैसे थे? :-P – Patrick

+2

@ पैट्रिक: यहां से पहली पंक्ति: http://meta.stackexchange.com/questions/9134/jon-skeet-facts/9135#9135;) – Bobby

+0

मुझे लगता है कि यह सी के सबसे कमजोर नुकसानों में से एक है -उत्पादित भाषाओं की अभिव्यक्ति वाक्यविन्यास ... – sum1stolemyname

3

आप एक प्रतिशत की गणना नहीं कर रहे हैं। कल्पना करें कि उपयोगकर्ता अधिकतम स्कोर में प्रवेश करता है: 200 + 200 + 200 = 600, जो 600 = 1 से विभाजित हो जाता है। यदि कोई भी स्कोर 200 से नीचे दर्ज हो जाता है, तो कुल 1 से कम होगा और 0 से नीचे हो जाएगा। आप उन्हें फ्लोट के रूप में स्टोर करना चाहिए (यह सुनिश्चित करने के लिए कि आप गोल करने के लिए कोई जानकारी खोना नहीं चाहते हैं) और 100 से गुणा करें।

2

यह एक डेटाटाइप समस्या है, मुझे लगता है। आपको फ्लोट करने के लिए स्कोर में से एक को टाइप करना चाहिए, क्योंकि आपका परिवर्तनीय प्रतिशत फ्लोट है, और सभी स्कोर int है।

0
using System; 

namespace stackOverflow 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int Score1; 
      int Score2; 
      int Score3; 

      Console.Write("Enter your score (out of 200 possible) on the first test: "); 
      Score1 = int.Parse(Console.ReadLine()); 
      Console.Write("Enter your score (out of 200 possible) on the second test: "); 
      Score2 = int.Parse(Console.ReadLine()); 
      Console.Write("Enter your score (out of 200 possible on the third test: "); 
      Score3 = int.Parse(Console.ReadLine()); 
      Console.WriteLine("\n"); 
      var percent = ((Score1 + Score2 + Score3)/6D); 
      Console.WriteLine("Your percentage to date is: {0:00.0}", percent); 
      Console.ReadLine(); 

     } 
    } 

}