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?