在你开始嘲笑这么简单的问题之前,让我解释一下:
我试图确定帐户中各种指标的变化(百分比%).这并不是特别难.但是,您通常如何处理当前值为零或先前值为零的情况?
即
本周:收益= 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)
变化可以是积极的或消极的.所以公式是:
var change = ((V2 - V1) / Math.Abs(V1)) * 100;
Run Code Online (Sandbox Code Playgroud)
例:
[((V2 - V1)/ | V1 |)*100]
=((220 - 110)/ | 110 |)*100 =(110/110)*100 = 1*100 = 100%变化
= 100%增加
[((V2 - V1)/ | V1 |)*100]
=((75 - 150)/ | 150 |)*100 =( - 75/150)*100 = -0.5*100 = -50%变化
=减少50%
注意:这不会处理零.你可以自己做
| 归档时间: |
|
| 查看次数: |
16785 次 |
| 最近记录: |