Calculate Percent Increase and Decrease

.net, c#, percentage

Solution

You're way over thinking it.

double CalculateChange(long previous, long current)
{
    if (previous == 0)
        throw new InvalidOperationException();

    var change = current - previous;
    return (double)change / previous;
}

To display this data to a user in a friendly 'percentage' format, you can use:

string DoubleToPercentageString(double d)
{
    return "%" + (Math.Round(d, 2) * 100).ToString();
}

Problem

I'm likely over-thinking this, but I'm looking for something a bit more elegant than what I currently have. I have this method called `CalculatePercentageTrend`, which takes in a `long` "previous" value and "current" value. As it currently stands : ``` 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; } ``` This feels very repetitive, and has a few short comings. Negative trends aren't calculated properly, as they always result in a 0.00% change - what would be great is if I could get a negative percentage IF in fact the previous value is greater than the current value. Also, I'm handling any possible 0's before dividing, but I'm wondering if there's a better approach to that as well. My Question : How can I get negative percentages to calculate correctly, and how can I improve this code overall?

Original source

Related problems