Calculer le Pourcentage d'Augmentation et de Diminution

Je suis probable de penser cela, mais je suis à la recherche de quelque chose d'un peu plus élégant que ce que j'ai actuellement.

J'ai cette méthode est appelée à CalculatePercentageTrend, qui prend en long "précédent", "actuel" de la valeur. Tel qu'il est actuellement :

public static string CalculatePercentageTrend(long previousValue, long currentValue)
{
    var trend = "0.00%";

    //calculate percentage increase
    if (previousValue < currentValue)
    {
        if (previousValue != 0)
        {
            var difference = previousValue - currentValue;
            var pctDecrease = (double)(difference / previousValue) * 100;
            trend = pctDecrease.ToString("P");
        }
        else
        {
            trend = currentValue.ToString("P");
        }
     }
    //calculate percentage decrease
    else if (currentValue < previousValue)
    {
        if (previousValue != 0)
        {
            var difference = currentValue - previousValue;
            var pctIncrease = (double)(difference / previousValue) * 100;
            trend = pctIncrease.ToString("P");
        }
        else
        {
            trend = currentValue.ToString("P");
        }
    }
    return trend;
}

C'est très répétitif, et qu'il a quelques lacunes. Les tendances négatives ne sont pas correctement pris en compte, comme ils l'ont toujours une 0.00% variation - ce qui serait formidable si je pouvais obtenir un pourcentage négatif SI, en fait, la valeur précédente est supérieur à la valeur actuelle.

Aussi, je suis toute manipulation possible de 0 avant de le diviser, mais je me demandais si il y a une meilleure approche.

Ma Question :

Comment puis-je obtenir négatif pourcentages pour calculer correctement, et comment puis-je améliorer ce code?

Vous devez vous débarrasser de votre premier si d'autre si. Il suffit de vérifier si une variable est de 0. Alors n' (précédent - actuel) / précédente * 100. Ce sera le retour de positif si ce n'est une augmentation et négatif s'il s'agit d'une diminution.
Au moins, le changement (double)(difference / previousValue) * 100 à ((double) difference / previousValue) * 100;
Important de comprendre que vous ne devez PAS multiplier ce résultat par 100 si vous avez l'intention de les utiliser dans un mode autre que d'afficher un plus "amical" de la valeur à l'utilisateur. 31% == .31, 31% != 31. 31 == 3100%.

OriginalL'auteur X3074861X | 2014-11-25