2010-09-13 18 views
5

Tengo este programa que saca 3 puntajes de 200 posibles cada uno, se supone que obtiene el promedio y muestra el porcentaje. pero cuando ingreso números, obtengo 00.0 como respuesta. ¿Qué podría estar haciendo mal?Emisión matemática simple en 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(); 
     } 
    } 
} 

Respuesta

17

Estás dividir un entero por un entero - que siempre utiliza aritmética de enteros, incluso cuando se está asignando el resultado a un float. La forma más simple de solucionar eso es hacer que uno de los operandos sea flotante, p.

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

Tenga en cuenta que esto no realidad le dará un porcentaje aunque - te dará un número entre 0 y 1 (suponiendo que las entradas están entre 0 y 200).

Para tener una porcentaje real, es necesario multiplicar por 100 - lo que equivale a solamente dividiendo por 6:

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

Woot? ¿Cómo pudiste escribir eso en menos de 33 segundos? :-P – Patrick

+2

@Patrick: Primera línea desde aquí: http://meta.stackexchange.com/questions/9134/jon-skeet-facts/9135#9135;) – Bobby

+0

Supongo que este es uno de los errores más comunes de C -sintaxis de expresión de los lenguajes derivados ... – sum1stolemyname

3

No está calculando un porcentaje. Imagine que el usuario ingresa el puntaje máximo: 200 + 200 + 200 = 600, que se divide entre 600 = 1. Si cualquiera de los puntajes se ingresa por debajo de 200, el total será menor que 1 y se redondeará a 0. Usted debería almacenarlos como flotadores (para asegurarse de no perder información al redondeo) y multiplicar por 100.

2

Creo que es un problema de tipo de datos. Debería encasillar uno de los puntajes para flotar, ya que su porcentaje variable es flotante, y todos los puntajes son 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(); 

     } 
    } 

}