首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要有关信用到期算法的帮助

需要有关信用到期算法的帮助
EN

Stack Overflow用户
提问于 2010-07-08 06:21:12
回答 7查看 675关注 0票数 7

所以我被卡住了。我正在研究一个有期限的信用系统。类似于信用卡里程,但并不完全如此。顺便说一句,我对前面的书感到抱歉,但我需要添加足够的细节来帮助了解整个情况。

我需要的是一个系统,其中用户积累做活动的信用。但他们也可以把这些积分花在活动上。如果未使用,积分应在30天后过期。我似乎被困在如何在每天晚上运行的批处理中准确计算这一点。任何语言的任何想法都会非常感谢,因为我似乎只卡在一个我无法绕过的小细节上。以下是数据的示例:

7/1:+5 -用户注册

7/2:+5 -用户与系统交互

7/2:-3 -用户购买活动

7/3:+5 -用户与系统交互

因此,在这一点上,用户已经收到了15个学分,并花费了3个。留给他的总共是12个学分。(至少我记下了基本的数学:P)

我要补充的是,目前我们正在考虑有两个字段: last processed,next processed。因此,假设这是一个新注册,此时这些值是:

上次处理日期: 7/1

下一次加工日期: 8/1

所以现在是8/1了。该批处理开始并查看超过30天的所有积分。在这点上是5。

这就是它开始变得模糊的地方。

然后,系统应该查看在过去30天内花费的所有学分,看看他们是否正在使用任何学分。因为它们只有在未被使用的情况下才会过期。所以有3个,所以我扣除用户2个积分,因为这是超过30天的积分和花费的积分的差额。因此,我完成了批次,并相应地设置了第二天的日期。现在假设他们没有花费更多的钱,我开始计算超过30的学分,这是5,花费的学分是3,但我显然不想考虑我昨天考虑的3个学分。什么是不再考虑这3个学分的好方法?

这就是我被卡住的地方。

我们正在考虑为到期的信用写一个借记记录,这样我们就可以跟踪它们,但很难看到如何在这个计算中使用它。

如果你读到这里,谢谢。如果你在回答中做了一点努力,我至少会为你的努力投上一票。

编辑:

好的,@Greg提到了一些我忘了说的事情。考虑过在学分上加一面旗子的想法。一个有效的点,但不是一个可以工作的点,原因如下:

假设在特定的一天,一个用户花费了10个积分。但是该批次考虑的到期积分仅累计到5个。那么,他应该还有5个积分没有过期,因为他花费了超过一个到期时间。所以旗帜不会起作用,因为我们会跳过那5个额外的学分。希望这是有意义的?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-07-08 23:11:22

假设您每天运行此批处理,您可以有一个表来跟踪他们获得的所有信用,以及他们使用的信用(负信用)。

在下个月初,你的工作只是找出在第一天赚到的学分中有哪些在当月没有花掉。

第一天获得的学分数量-他们上个月花了整整一个月的学分。如果数字是正数,则他们有一些积分需要过期。所以在表中添加一个负信用的记录就很简单了。这将使未使用的信用清零。

第二天,重复这个过程,看看他们在第二天获得了多少学分,减去了他们在上个月获得的所有学分的总和,并考虑到了你前一天创建的负积分的记录。

票数 2
EN

Stack Overflow用户

发布于 2010-07-08 07:09:29

对于系统的每个用户,保留一个数组,该数组存储有关用户在接下来的连续30天内可获得的信用额度的信息

例如,某些用户的数据可能如下所示

代码语言:javascript
运行
复制
8  | 
7  | | 
6  | | | | 
5  | | | | | | | | | | |
4  | | | | | | | | | | | | | | | | |
3  | | | | | | | | | | | | | | | | | | | | | | | | 
2  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
1  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
  -------------------------------------------------------------
  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   ^ ^                           ^          
   |  \_                         |
  today tomorrow             in 15 days

每次用户获得一些积分时,您都会将所有天的金额增加到所获得的积分数量。例如,如果用户获得2个积分,则该表的变化如下所示。这就像是上升了整个图表。

代码语言:javascript
运行
复制
10 | 
9  | | 
8  | | | | 
7  | | | | | | | | | | |
6  | | | | | | | | | | | | | | | | |
5  | | | | | | | | | | | | | | | | | | | | | | | | 
4  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
3  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
2  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
1  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
  -------------------------------------------------------------
  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   ^ ^                           ^          
   |  \_                         |
  today tomorrow             in 15 days

如果用户今天有x个信用,并且花费了y个信用,那么您就会将他可用的信用额度减少到x- y,因为他的额度每一天都大于x-y。对于不超过x-y的天数,额度保持不变。这就像切掉了图表的顶端。例如,如果用户花费3个积分,则图表将更改为

代码语言:javascript
运行
复制
7  | | | | | | | | | | |
6  | | | | | | | | | | | | | | | | |
5  | | | | | | | | | | | | | | | | | | | | | | | | 
4  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
3  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
2  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
1  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
  -------------------------------------------------------------
  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   ^ ^                           ^          
   |  \_                         |
  today tomorrow             in 15 days

每天您将图表向左移动以模拟即将到期的积分。用户明天将拥有以下金额

代码语言:javascript
运行
复制
7  | | | | | | | | | |
6  | | | | | | | | | | | | | | | |
5  | | | | | | | | | | | | | | | | | | | | | | | 
4  | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
3  | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
2  | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
1  | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
  -------------------------------------------------------------
  | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
   ^ ^                           ^          
   |  \_                         |
  today tomorrow             in 15 days
票数 4
EN

Stack Overflow用户

发布于 2010-07-08 06:28:51

我不会考虑在呈现数据时尝试对其进行处理。相反,您应该跟踪用户有多少积分,以及它们何时到期。这样,您就可以跟踪购买时使用了哪些积分,而不是试图在以后解决所有问题。

因此,当用户注册时,他们需要:

代码语言:javascript
运行
复制
5 credits expiring on 8/1

第二天与系统交互后:

代码语言:javascript
运行
复制
5 credits expiring on 8/1
5 credits expiring on 8/2

购买后:

代码语言:javascript
运行
复制
2 credits expiring on 8/1
5 credits expiring on 8/2

诸若此类。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3199362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档