【问题标题】:Compounding interest monthly with a deposit通过存款每月复利
【发布时间】:2019-08-25 01:29:48
【问题描述】:

我想每周/每两周/每月/每年复利一次。

我还想要一个可以添加存款金额的选项。

我已经尝试过计算最终应计金额的标准公式,如下所示:

例如,这是我计算每周复利的方法:

function calculateWeekly(state: any) {
  const { savings, deposit ,interest, timePeriodSelector, timePeriodLength } = state;

  let numberOfYears = 0;

  if (timePeriodSelector === "weekly") {
    numberOfYears = timePeriodLength / weeksInAYear;
  } else if (timePeriodSelector === "fortnightly") {
    numberOfYears = (timePeriodLength / weeksInAYear) * 2;
  } else if (timePeriodSelector === "monthly") {
    numberOfYears = (timePeriodLength / weeksInAYear) * weeksInAMonth;
  } else if (timePeriodSelector === "annually") {
    numberOfYears = (timePeriodLength / weeksInAYear) * weeksInAYear;
  }

  const weeklyRate = interest / 100 / weeksInAYear;
  const lengthOfCompunding = numberOfYears * weeksInAYear;

  let startingFigure = parseInt(savings) + parseInt(deposit);

  //total gets added on for every time cycle of week
  let total =
    (startingFigure * (Math.pow(1 + weeklyRate, lengthOfCompunding) - 1)) / weeklyRate;

  return roundToTwoDP(total);
}

上述代码的问题是,每次产生利息时,存款都会被添加到计算中。因此,为期 10 周的每周 10 美元的押金实际上将加起来为 100 美元。

我在这里尝试了一种每周使用循环来累积利息的方法:

  // loops how many times to compound the interest
  for(let i = numberOfYears - (1/weeksInAYear); i > 0; i-= (1/weeksInAYear)){
    let interestGained = (total * (Math.pow((1 + weeklyRate), lengthOfCompunding))) - total;
    total += interestGained + savings;
  }

感谢您的帮助!

【问题讨论】:

  • 总计 += 获得的利息 + 储蓄;为什么每次都增加储蓄?

标签: javascript formula


【解决方案1】:

这应该做你想做的:

const range = (min, max) => {

    const size = 1 + max - min

    return [...Array(size).keys()].map(n => n + min)
}

const weeksInAYear = 52

const addWeeklyInterest = interestRatePerWeek => (savings, _) => savings + savings * interestRatePerWeek

const calculateTotal = (savings, numberOfYears, interestRatePerWeek) => {

    const numberOfWeeks = numberOfYears * weeksInAYear

    return range(1, numberOfWeeks).reduce(addWeeklyInterest(interestRatePerWeek), savings)
}

console.log(calculateTotal(1000.00, 1, 0.02))

输出为2800.328185448178。您可能希望将其四舍五入以进行显示,但请记住,如果准确性很重要,则不能使用浮点数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2015-04-23
    • 2011-01-28
    相关资源
    最近更新 更多