我目前正在尝试开发一个复利计算器,其中包括每月供款。我已经成功地使用以下代码在没有每月供款的情况下计算复利,但无法计算出添加每月供款时的公式。
double calculatedValue = (principalValue * Math.pow(1 + (interestRateValue/numberOfCompoundsValue), (termValue * numberOfCompoundsValue)));
当试图通过贡献获得计算值时,我改变了这样做的方式。请参阅下面的代码,了解我是如何实现这一点的。
//The starting principal
double principalValue = 5000;
//Interest rate (%)
double interestRateValue = 0.05;
//How many times a year to add interest
int numberOfCompoundsValue = 4;
//The number of years used for the calculation
double termValue = 30;
//The monthly contribution amount
double monthlyContributionsValue = 400;
//How often interest is added. E.g. Every 3 months if adding interest 4 times in a year
int interestAddedEveryXMonths = 12/numberOfCompoundsValue;
//The total number of months for the calculation
int totalNumberOfMonths = (int)(12 * termValue);
for(int i = 1; i <= totalNumberOfMonths; i++)
{
principalValue += monthlyContributionsValue;
if(i % interestAddedEveryXMonths == 0)
{
principalValue += (principalValue * interestRateValue);
}
}
我想这应该符合我的要求。每月将本金增加供款金额,如果该月等于应加利息的月份,则计算利息*利率,并将其加至本金。
当使用上面的值时,我期望得到355242.18美元的答案,但得到10511941.97美元,这在我的银行账户中看起来更好,但在我的计算中没有。
如果有人能给我一些帮助或指出我哪里出了错,我将不胜感激。
提前谢谢
static void Main(string[] args)
{
double monthlyDeposit;
double rateOfInterest;
double numberOfCompounds;
double years;
double futureValue = 0;
double totalAmount = 0;
Console.WriteLine("Compound Interest Calculation based on monthly deposits");
Console.WriteLine("Monthly Deposit");
monthlyDeposit = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Rate Of Interest");
rateOfInterest = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Number of Compounds in a year");
numberOfCompounds = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Number of year");
years = Convert.ToDouble(Console.ReadLine());
futureValue = monthlyDeposit;
for (int i = 1; i <= years * 12; i++)
{
totalAmount = futureValue * (1 + (rateOfInterest / 100) / 12);
if (i == years * 12)
futureValue = totalAmount;
else
futureValue = totalAmount + monthlyDeposit;
}
Console.WriteLine("Future Value is=" + futureValue);
Console.ReadLine();
}
//Output
Compound Interest Calculation based on monthly Deposits
Monthly Deposit
1500
Rate Of Interest
7.5
Number of Compounds in a year
12
Number of year
1
Future Value is=18748.2726237313
经过一些简短的测试,我得出结论,您可以:
>
或
错误地问了你的问题
您所描述的您想要的计算(5000美元开始,每月400美元,30年利息,每3个月)由您提供的代码找到。它给出的值($10,511,941.97)在我看来确实是正确的。我能提供的唯一其他建议是,如果您需要(例如termValue
可以是int
),并且当您知道值不会改变时(例如interest stRateValue
)使用最终
。这将有助于避免更大程序中的任何不可预见的错误。我希望这能帮助你找出你的兴趣计算器或回答你的任何问题。
您的问题在于:
principalValue += (principalValue * interestRateValue);
你每季度加一整年的利息,而你应该只加一个季度的利息。你需要降低利率以获得合适的利率。
下面是一个示例:
class CashFlow {
private final double initialDeposit;
private final double rate;
private final int years;
private final double monthlyContribution;
private final int interestFrequency;
CashFlow(double initialDeposit, double rate, int years,
double monthlyContribution, int interestFrequency) {
if ( years < 1 ) {
throw new IllegalArgumentException("years must be at least 1");
}
if ( rate <= 0 ) {
throw new IllegalArgumentException("rate must be positive");
}
if ( 12 % interestFrequency != 0 ) {
throw new IllegalArgumentException("frequency must divide 12");
}
this.initialDeposit = initialDeposit;
this.rate = rate;
this.years = years;
this.monthlyContribution = monthlyContribution;
this.interestFrequency = interestFrequency;
}
public double terminalValue() {
final int interestPeriod = 12 / interestFrequency;
final double pRate = Math.pow(1 + rate, 1.0 / interestPeriod) - 1;
double value = initialDeposit;
for ( int i = 0; i < years * 12; ++i ) {
value += monthlyContribution;
if ( i % interestFrequency == interestFrequency - 1 ) {
value *= 1 + pRate;
}
}
return value;
}
}
class CompoundCalc {
public static void main(String[] args) {
CashFlow cf = new CashFlow(5000, 0.05, 30, 400, 3);
System.out.println("Terminal value: " + cf.terminalValue());
}
}
带输出:
run:
Terminal value: 350421.2302849443
BUILD SUCCESSFUL (total time: 0 seconds)
这接近你找到的35.5万美元的价值。
您可以使用许多不同的约定来获取季度费率。将年利率除以4是一个简单而实用的方法,但上面的pow(1利率,1/4)-1方法在理论上更可靠,因为它在数学上与相应的年利率相等。
以下两者之间的区别是什么:
问题内容: 假设您正在为BarBaz Incorporated开发项目的核心模块。您的代码片段可能如下所示: 如果您的公司网站不是,而是惯例,那会是什么样的惯例? 问题答案: SUN时代的Java语言规范给出了建议的约定: 如果域名包含连字符或标识符中不允许的任何其他特殊字符(第3.8节),请将其转换为下划线。 但这只是一个建议…
所以我要做的任务是找出一个委托人达到某个值所需的年数。比如说,我从5000美元开始,我想以10%的年利率积累15000美元。我想知道这项投资的持续时间有多长 这就是我到目前为止所做的 输出: 如何只打印最后一行?
有没有办法在Java8中构建一个使用索引迭代的方法?理想情况下,我想要这样的东西: 我现在能做的就是:
该简介旨在创建一个ID为1122、余额为20000英镑、年利率为4.5%、取款方式为2500英镑、存款方式为3000英镑、打印余额、月利率和账户创建日期的账户对象。 我写了下面的代码,但主要方法是初始余额错误应该是20000英镑,而不是20500英镑,提款和存款也错误。金额应该是提款=17,500英镑,存款=20,500英镑。关于如何重新爱这个有什么建议吗?
本文向大家介绍bluepy 一款python封装的BLE利器简单介绍,包括了bluepy 一款python封装的BLE利器简单介绍的使用技巧和注意事项,需要的朋友参考一下 1、bluepy 简介 bluepy 是github上一个很好的蓝牙开源项目,其地址在 LINK-1, 其主要功能是用python实现linux上BLE的接口。 This is a project to provide an A