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

标签 c# linq-to-sql

在你开始 mock 这样一个简单的问题之前,让我解释一下:

我正在尝试确定帐户中各种指标的变化量(百分比 %)。这不是特别难。但是一般如何处理当前值为零或前一个值为零的情况?

本周:收入 = $25.6

上周:收入 = $0.0

我目前通过以下公式计算百分比差异:

If (CurrentValue > 0.0 && PreviousValue > 0.0) {
   return (CurrentValue - PreviousValue) / PreviousValue;
}  return 0.0;

如果前一周的收入为零 - 差异百分比应该是多少? +无限
如果当前周为零,则相反? -无限

然后使事情复杂化,您将如何在 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,

最佳答案

变化可以是积极的也可以是消极的。所以公式是:

var change = ((V2 - V1) / Math.Abs(V1)) * 100;

示例:

  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%

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

关于c# - 计算两个值之间的百分比差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1376507/

相关文章:

C# 模式匹配

c# - TemporaryKey.pfx 的问题我没有密码

ASP.NET Linq 数据源 - 在 where 参数中使用枚举

c# - 如何清除 Linq to Sql 上的 DataContext 缓存

c# - 寻找示例代码 Silverlight 3d c#

c# - ASP.NET:如何从已编译的程序集中重写非虚拟方法?

c# - 如何使用asp.net从远程服务器下载文件

linq-to-sql - LINQ to Entities 未返回预期结果

sql-server - 使用相当于 sql IN 运算符的 linq

c# - LINQ to SQL Left Join 左边部分为空