Простая математическая проблема в C # - PullRequest
5 голосов
/ 13 сентября 2010

У меня есть эта программа, которая берет 3 балла из возможных 200, а затем должна получить среднее значение и отобразить процент.но когда я ввожу числа, я получаю 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();
        }
    }
}

Ответы [ 4 ]

17 голосов
/ 13 сентября 2010

Вы делите целое число на целое число, которое всегда использует целочисленную арифметику, даже когда вы присваиваете результат float.Самый простой способ исправить это сделать один из операндов плавающим, например,

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

Обратите внимание, что на самом деле не даст вам процент - он даст вамчисло от 0 до 1 (при условии, что ввод от 0 до 200).

Чтобы получить фактический процент, вам нужно умножить на 100 - что эквивалентно делению только на 6:

float percent = (Score1 + Score2 + Score3) / 6f;
3 голосов
/ 13 сентября 2010

Вы не рассчитываете процент. Представьте, что пользователь вводит максимальную оценку: 200 + 200 + 200 = 600, которая делится на 600 = 1. Если любая из оценок будет введена ниже 200, общая сумма будет меньше 1 и будет округлена до 0. Вы должны хранить их как числа с плавающей запятой (чтобы избежать потери информации при округлении) и умножить на 100.

2 голосов
/ 13 сентября 2010

Думаю, это проблема с типом данных. Вам следует ввести одно из значений для вычисления числа с плавающей запятой, поскольку переменный процент - это число с плавающей точкой, а все значения - целое число.

0 голосов
/ 13 сентября 2010
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();

        }
    } 

}
...