如何按加权金额分割资金?

时间:2016-05-04 12:59:46

标签: javascript split currency distribution

我的目标是在T件之间分割总计N,其中每件事物的重量w[i]介于0和1之间。

这里有两件事同时发生:

  • 我使用滑块(JavaScript)进行重量选择,我试图确保所有重量的总和为1.
  • 感谢第一件事,大部分的每件物品都相当简单,只是w[i] × T

但是,有一些怪癖:

  • 由于滑块具有像素精度,因此所有权重的总和通常 close 为1,但往往略微偏离几百分之一。
  • 因为最低单位是美分,我不能在三件事之间平均分配1.00美元;有些东西必须得到额外的分钱。现在,我正在尝试给予/从最后一件事中获取额外/缺少的分数。

所有这些,我有两个要求:

  • 使用加权分布尽可能准确。
  • 每件物品的数量必须加起来为原始总数。

什么是最好的JavaScript解决方案,假设我有这样的功能:

/**
 * Calculates the Weighted Distribution between an arbitrary number
 * of people, and returns it.
 *
 * @param  array  weights  The weights for each thing (Sums up to nearly 1)
 * @param  int    total    The total amount to be split (in cents)
 *
 * @return array  The Weighted Distribution (each element is in cents)
 */
function calc(weights, total)
{
    // Determine the total number of Things
    var things = weights.length;

    /* Do stuff */
    return distribution;
}

请注意,我使用美分发送所有内容。这应该有助于计算过程,因为任何表示为浮点数的货币都是无效的。

1 个答案:

答案 0 :(得分:0)

有点不清楚你的问题是什么。然而,对于精确计算权重的事情,除以美分等,你最好在计算中使用小数,而不是浮点数,如https://mikemcl.github.io/decimal.js/