计算增加和减少百分比
本文关键字:百分比 增加 计算 | 更新日期: 2023-09-27 18:32:01
我可能想多了,但我正在寻找比我目前拥有的更优雅的东西。
我有一个名为 CalculatePercentageTrend
的方法,它接受long
"上一个"值和"当前"值。目前的情况:
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;
}
这感觉非常重复,并且有一些缺点。负面趋势没有正确计算,因为它们总是导致 0.00% 的变化 - 如果我能得到一个负百分比 IF 实际上以前的值大于当前值,那就太好了。
另外,我在除法之前正在处理任何可能的 0,但我想知道是否有更好的方法。
我的问题 :
如何获得负百分比以正确计算,以及如何从整体上改进此代码?
你想得太多了。
double CalculateChange(long previous, long current)
{
if (previous == 0)
throw new InvalidOperationException();
var change = current - previous;
return (double)change / previous;
}
要以友好的"百分比"格式向用户显示此数据,您可以使用:
string DoubleToPercentageString(double d)
{
return "%" + (Math.Round(d, 2) * 100).ToString();
}
我以 100% 的准确性使用以下函数。
decimal CalculateChange(decimal previous, decimal current)
{
if (previous == 0)
return 0;
if (current == 0)
return -100;
var change = ((current - previous) / previous) * 100;
return change;
}
我认为这将解决您的问题,您所需要的只是计算差异及其与先前值的比率。
public static string CalculatePercentageTrend(long previous, long current)
{
return ((current - previous) / (double)previous).ToString("p");
}