2010-09-13 68 views
5

Tôi có chương trình này lấy 3 điểm trong số 200 điểm có thể, mỗi trường được cho là đạt điểm trung bình và hiển thị phần trăm. nhưng khi tôi nhập số tôi nhận được 00.0 như một câu trả lời. Tôi có thể làm gì sai?Vấn đề toán đơn giản trong C#

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(); 
     } 
    } 
} 

Trả lời

17

Bạn đang chia một số nguyên cho một số nguyên - luôn sử dụng số học số nguyên, ngay cả khi bạn chỉ định kết quả là float. Cách đơn giản nhất để sửa lỗi đó là làm cho một toán hạng trở thành một phao, ví dụ:

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

Lưu ý rằng điều này sẽ không thực sự cung cấp cho bạn một tỷ lệ mặc dù - nó sẽ cung cấp cho bạn một số giữa 0 và 1 (giả sử các yếu tố đầu nằm giữa 0 và 200).

Để có được một tỷ lệ phần trăm thực tế, bạn cần phải nhân với 100 - tương đương với chỉ chia cho 6:

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

Woot? Làm thế nào bạn có thể gõ rằng trong vòng chưa đầy 33 giây? :-P – Patrick

+2

@Patrick: Dòng đầu tiên từ đây: http://meta.stackexchange.com/questions/9134/jon-skeet-facts/9135#9135;) – Bobby

+0

Tôi đoán đây là một trong những cạm bẫy commen nhất của C cú pháp biểu thức của ngôn ngữ được kích hoạt ... – sum1stolemyname

3

Bạn chưa tính phần trăm. Hãy tưởng tượng người dùng nhập số điểm tối đa: 200 + 200 + 200 = 600, được chia cho 600 = 1. Nếu bất kỳ điểm nào được nhập dưới 200, tổng số sẽ nhỏ hơn 1 và được làm tròn xuống 0. Bạn nên lưu trữ chúng dưới dạng phao (để đảm bảo bạn không mất thông tin làm tròn) và nhân với 100.

2

Đó là vấn đề về kiểu dữ liệu, tôi nghĩ vậy. Bạn nên đánh máy một trong những điểm số để nổi, vì phần trăm biến của bạn là nổi, và tất cả các điểm số là 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(); 

     } 
    } 

} 
Các vấn đề liên quan