Javascript 贷款计算中的价值始终不一致

Javascript 贷款计算中的价值始终不一致,javascript,Javascript,我试图通过JavaScript中的MITx 6.00.1x的习题集作为一个学习练习,试图更好地掌握如何在JS中解决算法问题,而不是像以前那样只处理框架/库和DOM操作,但是在第二个问题集的第一次赋值中,在for循环的第二次迭代之后,我的值始终为off 以下是测试用例的正确值供参考,其中余额=42,年利率=0.2,月付款率=0.04: 第一个月剩余余额:40.99 第2个月剩余余额:40.01 第3个月剩余余额:39.05 第4个月剩余余额:38.11 第5个月剩余余额:37.2 第6个月剩余余额

我试图通过JavaScript中的MITx 6.00.1x的习题集作为一个学习练习,试图更好地掌握如何在JS中解决算法问题,而不是像以前那样只处理框架/库和DOM操作,但是在第二个问题集的第一次赋值中,在for循环的第二次迭代之后,我的值始终为off

以下是测试用例的正确值供参考,其中余额=42,年利率=0.2,月付款率=0.04:

第一个月剩余余额:40.99

第2个月剩余余额:40.01

第3个月剩余余额:39.05

第4个月剩余余额:38.11

第5个月剩余余额:37.2

第6个月剩余余额:36.3

第7个月剩余余额:35.43

第8个月剩余余额:34.58

第9个月剩余余额:33.75

第10个月剩余余额:32.94

第11个月剩余余额:32.15

第12个月剩余余额:31.38

但是,我从代码中获得的值是:

第一个月剩余余额:40.992

第2个月剩余余额:40.035

第3个月余额:39.101

第4个月余额:38.188

第5个月余额:37.297

第6个月余额:36.427

第7个月余额:35.577

第8个月剩余余额:34.747

第9个月余额:33.936

第10个月剩余余额:33.144

第11个月剩余余额:32.371

第12个月剩余余额:32.371

这是我的代码,供参考

//函数计算支付确切最低金额一年后的贷款未偿还金额,假设为复利
年后功能余额(余额、年利率、月付款率){
//月利率
var monthlyInterest=年度利率/12.0
//最低月付款额,由月付款率(十进制)乘以当前未清余额定义
var minPayment=月付款率*余额;
//给定月份的未付余额等于上个月的余额减去每月最低付款额
var unpaidBalance=余额-小额支付;
//给定月份的更新余额等于未付余额+(未付余额*月利率)。此处初始化为0,因为这不适用于上述值所代表的第0个月。
var updatedBalance=0;
对于(变量i=1;i<12;i++){
minPayment=月付款率*未付款余额;
更新余额=未支付余额+(未支付余额*月利息);
unpaidBalance=更新的余额-最小付款;
}
将更新后的余额返回固定(2);

}
看起来您并没有在需要时截断数字。你的银行账户将记录你的钱,精确到小数点后2分。例如,在支付利息后,你第一个月的余额应该是40.99美元,而不是40.992美元。截断或四舍五入到美分。我认为接下来的每个月都在增加小数点后第三位引入的错误。您可能想看看。

您的算法是错误的。您所需要做的就是扣除付款并计提利息:

函数f(b,r,m){
对于(变量i=0;i<12;i++){
b=b*(1-m)*(1+r/12);
}
返回b.toFixed(2);
}

console.log(f(42,0.2,0.04))如果您只使用调试器并逐步完成该函数,我相信您可以找到问题所在,非常感谢您提供礼貌和有见地的答案。如果我有这样做的名声,我会投票给你的。@TrypanosomaBruceii不客气,我希望这会有帮助。非常感谢你,像这样的基本算法错误在我以前写对的东西中是相当尴尬的。我应该知道,不要责怪语言,发表一个问题,而不是考虑(更可能)我做了一些错误的基本水平。