Calcular el Porcentaje en C#

Lo que me estoy perdiendo aquí al intentar calcular el porcentaje completado? Mi porcentaje ecuación parece que vuelve un porcentaje correcto.

Int32 counter = 0;

foreach (var vehicle in vehicles)
{
    counter += 1;

    Int32 percentage = (Int32)((double)counter * vehicles.Count()) / 100;

    _worker.ReportProgress(percentage);


    if (_worker.CancellationPending)
    {
        e.Cancel = true;
        _worker.ReportProgress(0);
        return;
    }
}
  • «Mi porcentaje ecuación parece que vuelve un porcentaje correcto.» Lo que los valores de entrada de dar lo que el valor de salida, y ¿qué esperabas? Se puede reescribir esto como una breve, pero completa aplicación de consola? (Debe ser trivial para hacerlo).
  • ¿Por qué estás multiplicando contador de la cuenta y no dividir? Creo que eres un poco hacia atrás en su fórmula no…
  • iMortalitySX, tienes razón. Lo tengo un poco hacia atrás. 🙂

4 Kommentare

  1. 12

    Para trabajar los porcentajes que usted debe hacer

    progress
    --------  x 100
     total

    Que están haciendo

    progress x total
    ----------------
           100

    Trate de usar (counter * 100) /vehicles.Count() lugar.

    Nota: Si haces la multiplicación por 100 antes de la división que significa que usted no tiene que ensuciar alrededor con moldes de carrozas /dobles, sin embargo esto no significa que todos los porcentajes están redondeados hacia abajo. Si desea una información más precisa porcentaje, entonces elenco de dobles y no te preocupes por el orden.

    • Sí, me di cuenta de que esta es la ruta correcta. No he dormido lo suficiente la noche pasada, creo. 🙂
    • Si tengo 1, 4, 1 y trato de conseguir porcentaje de uso de Math.Round(), me acaban de obtener un 17%, 67%, el 17% que suma un total de 101%. ¿Cómo puedo arreglar eso?
  2. 9

    ¿

         Int32 percentage = counter * 100 / vehicles.Count();
    • +1 pero no se olvide de comprobar Count() != 0 (o vehículos != null para esa materia).
    • como está dentro del bucle foreach, Recuento es siempre > 0 si el código dentro del bucle se ejecuta
    • LOL, estás en lo correcto, yo solo se entiende como un caso general, usted deberá revisar estos.
  3. 3

    Prueba esto :-

      int percentage= (int)( ((100f * counter) / vehicles.count()));

    Elenco de flotador para evitar la división de enteros dándole un cero, y usted puede añadir 0,5 por entero de redondeo. Uso 0.5 0.5 f no para mantener su expansión a doble ie

      int percentage= (int)(0.5f + ((100f * counter) / vehicles.count()));
  4. 1

    También puede usar las Matemáticas.round():

    Int32 percentage = (Int32)Math.Round( (double)(counter * 100) / vehicles.Count());
    • Si tengo 1, 4, 1 y trato de conseguir porcentaje de uso de Math.Round(), me acaban de obtener un 17%, 67%, el 17% que suma un total de 101%. ¿Cómo puedo arreglar eso?
    • Se está perdiendo la información antes de realizar su suma; debe llevar más de precisión antes de hacer o total, cosa que usted no puede esperar que sus cálculos posteriores para mantener un gran exactitud. por ejemplo, En su ejemplo, mantener un decimal por el uso de las Matemáticas.Round(x,1), el resultado será una suma de 100.1 que ronda los 100.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea