【问题标题】:Divide results based on percentage根据百分比划分结果
【发布时间】:2010-12-03 06:30:05
【问题描述】:

我正在为我们的应用程序中的一项新功能编写说明。 现在我们要做的是,每当客户以特定货币发送转账消息时,我们需要在一个或多个银行之间进行分配。

每次发送转账信息时,80% 到银行 A 和 20% 到银行 B 等。我们需要在我们的数据库(sql 2005)中构建它,以便如果百分比变化我们能够改变它。 我很难根据我们数据库中的百分比来编写计算 80% 的消息何时发送到银行 A 以及 20% 的消息何时发送到银行 b 的规范。我最初想实现一个计数器来计算消息,然后根据百分比进行计算,但不确定算法。你能帮忙吗?

【问题讨论】:

    标签: process


    【解决方案1】:

    如果您不需要保证结果,您可以简单地将路由基于随机数生成器:

    var r = rand() // assume it yields a decimal between 0.0 and 1.0
    if (r < 0.2) sendToBankB()
    else         sendToBankA()
    

    上面显然是硬编码和简化的,只针对两个银行,但我想你可以看到如何将它推广到 N 个银行的 N 个百分比:按百分比排序并按升序测试数组。

    如果您确实需要准确无误(将四个发送到银行 A,第五个始终发送到银行 B),那么我认为您需要实施一个计数器。对此,我心中最重要的问题是:

    • 如果您的奇数比率没有很好地降低(例如 51% 和 49%),是否可以将 51 发送到 A 银行,然后将 49 发送到 B 银行,或者您希望交替发送直到最后一个?

    一般来说,首先通过除以greatest common divisor 来降低比率,然后依次向每个银行发送正确数量的消息,或者在相同的重复周期内将所有结果混在一起。

    【讨论】:

    • 我需要精确,即 50-50、80-20、20-30-50。我认为需要一个计数器,问题是您如何根据这些百分比分配“传输消息”?我的意思是,如果我的计数器现在是 12 条消息,那么程序员现在会如何知道银行 A 的 70% 的百分比得到满足,所以系统需要开始向 BankB 分配消息,直到满足 30% .或者即使百分比是 50-50,他现在是否会因为上一条消息分配给银行 a 而下一条消息需要分配给银行 b?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多