计算两个值之间的百分比差异

And*_*rry 5 c# linq-to-sql

在你开始嘲笑这么简单的问题之前,让我解释一下:

我试图确定帐户中各种指标的变化(百分比%).这并不是特别难.但是,您通常如何处理当前值为零或先前值为零的情况?

本周:收益= 25.6美元

上周:收益= 0.0美元

我目前通过以下公式计算%差异:

If (CurrentValue > 0.0 && PreviousValue > 0.0) {
   return (CurrentValue - PreviousValue) / PreviousValue;
}  return 0.0;
Run Code Online (Sandbox Code Playgroud)

如果前一周的收益为零 - 差异应该是多少?+无限
反之,如果当前周为零?- 无限

然后复杂的事情是如何在Linq-To-SQL查询中处理这个问题

Upside_Earnings = (statistics.Where(d => d.DateTime > first_startdate && d.DateTime <= first_enddate).Average(e => (double)e.Earnings) > zero &&
                                     statistics.Where(d => d.DateTime > second_startdate && d.DateTime <= second_enddate).Average(e => (double)e.Earnings) > zero) ?
                                   ((statistics.Where(d => d.DateTime > first_startdate && d.DateTime <= first_enddate).Average(e => (double)e.Earnings) -
                                     statistics.Where(d => d.DateTime > second_startdate && d.DateTime <= second_enddate).Average(e => (double)e.Earnings)) /
                                     statistics.Where(d => d.DateTime > second_startdate && d.DateTime <= second_enddate).Average(e => (double)e.Earnings)) : zero,
Run Code Online (Sandbox Code Playgroud)

Dmi*_*lov 8

变化可以是积极的或消极的.所以公式是:

var change = ((V2 - V1) / Math.Abs(V1)) * 100;
Run Code Online (Sandbox Code Playgroud)

例:

  1. 计算从V1 = 110到V2 = 220的百分比变化(正变化)

[((V2 - V1)/ | V1 |)*100]

=((220 - 110)/ | 110 |)*100 =(110/110)*100 = 1*100 = 100%变化

= 100%增加

  1. 计算从V1 = 150到V2 = 75的百分比变化(负变化)

[((V2 - V1)/ | V1 |)*100]

=((75 - 150)/ | 150 |)*100 =( - 75/150)*100 = -0.5*100 = -50%变化

=减少50%

注意:这不会处理零.你可以自己做


Sco*_*ttS 5

在这种情况下该做什么是主观的,可能取决于您的业务需求.

如果没有其他选择,我宁愿不可用.

100%可能有意义.

也许使用1而不是0也可能有意义,导致你的例子中有2560%.