Javascript 如何计算混合费用?

Javascript 如何计算混合费用?,javascript,math,Javascript,Math,我试图使用费用表计算投资管理费用。例如,假设投资金额为5000000美元,这是费用表: 1000000及以下:1.00% 2000000:0.75% 3000000:0.50% 3000001+:0.25% 其中1000000美元以下的收费为1.00%,3000000美元以上的收费为0.25%。我需要使用javascript来计算混合价格(本例中的答案是0.55%或27500美元) 如果我们以5000000美元为例,并按照上面的费用表,您如何得到答案 $1000000*0.0100=$10

我试图使用费用表计算投资管理费用。例如,假设投资金额为5000000美元,这是费用表:

  • 1000000及以下:1.00%
  • 2000000:0.75%
  • 3000000:0.50%
  • 3000001+:0.25%
其中1000000美元以下的收费为1.00%,3000000美元以上的收费为0.25%。我需要使用javascript来计算混合价格(本例中的答案是0.55%或27500美元)

如果我们以5000000美元为例,并按照上面的费用表,您如何得到答案

  • $1000000*0.0100=$10000(前100万美元的费用)
  • $1000000*0.0075=$7500(第二次收费$100万)
  • $1000000*0.0050=$5000(第三方的费用为$100万)
  • $2000000*0.0025=$5000(超过$300万的所有项目)
因此,要管理500万美元,成本将是上述费用的总和(27500美元)。27500美元/5000000美元=0.55%,这是我们的“混合费用”

需要注意的是,并不是每个收费表都是这样的。有些有不同的费用和限制

到目前为止,我对这个问题的研究结果是什么?我还没有找到一个函数的高质量示例可以实现这一点。似乎所有的分层定价计算都是如此,所以对于给定数量的商品,只确定一个单一的价格,而不是混合价格,尽管我在这里试图实现这一点

我的费用计划可能类似于以下阵列:

fee_schedule: [
{ fee: 0.0100, limit: 1000000},
{ fee: 0.0075, limit: 2000000},
{ fee: 0.0050, limit: 3000000},
{ fee: 0.0025, limit: Infinity}
]
这是我开始往下写的方向,但我的脑袋撞到了一堵墙,因为我看到自己写了一个长得可笑的函数

function determineFee(schedule, amount) {
   schedule.forEach(tier => {
    if (amount <= tier.limit) {
     // is this a path I should go down?
    }
   }
  //
}
函数确定ee(计划、金额){
schedule.forEach(层=>{

如果(金额您可以构建最后或零与实际限额的增量,或者如果它是最后一个元素,则取
无穷
,用于剩余价值的剩余费用

然后检查该值是否小于增量。如果为真,计算剩余值的费用并结束循环

否则,从增量计算费用,使用增量递减该值,并将限制指定为最后一个值,以便在下一个循环中使用该值

函数获取费用(值){
var费用=0;
费用表。一些((o,i,a)=>{
var delta=i+1==a.length
无穷
:o.limit-(a[i-1]&&a[i-1]。limit | | 0);
if(值<增量){
费用+=价值*o.费用;
返回true;
}
费用+=三角洲*运营费;
值-=增量;
});
退货费;
}
var费用计划=[{费用:0.0100,限额:1000000},{费用:0.0075,限额:2000000},{费用:0.0050,限额:3000000},{费用:0.0025,限额:4000000}],
价值=5000000,
费用=获取费用(价值);

console.log(费用);
还有一种可能性:

const混合=(计划)=>(金额)=>
schedule.reduce((总和,{费用,限额},idx,sched)=>{
const top=Math.min(限额、金额)
const bottom=idx==0?0:sched[idx-1]。限制
返回金额+(顶部>底部?费用*(顶部-底部):0)
}, 0)
const blendedFee=(时间表)=>{
常量计算=混合(明细表)
返回(金额)=>计算(金额)/金额
}
施工费用表=[
{费用:0.0100,限额:1000000},
{费用:0.0075,限额:2000000},
{费用:0.0050,限额:3000000},
{费用:0.0025,限额:无限}
]
console.log(混合(费用表)(5000000))

console.log(混合费用(费用表)(5000000))
我认为更明确地说明不同的费率是如何组合的,以及您在示例中是如何得到27500的结果会有所帮助。@RobertDodier感谢您的建议,我现在就添加它。我真的不明白
4000000
限制应该如何工作。其他限制显示了其范围的顶部。这一个是ems毫无意义。@ScottSauyet,是的,我认为它是无限的。顺便说一句,对小组的限制会更好。@ScottSauyet是的,可能应该把“和”放在上面这里不是400万美元。我更新了问题以反映这一点。感谢您指出。为什么
一些
forEach
似乎更为惯用。因为提前退出的值较小。我认为您的第一个示例比第二个更适合我的用例。我只是玩弄了使用delta作为
限制e> ,但对最终用户来说,设置一个真正的
限制对他们来说更好。谢谢,斯科特。我同意,这更容易理解!这对像我这样的新手非常有帮助!