首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最低固定月还款额结果错误

最低固定月还款额结果错误
EN

Stack Overflow用户
提问于 2015-02-20 04:34:54
回答 2查看 318关注 0票数 0

写一个程序,计算出在12个月内还清信用卡余额所需的最低固定月还款额。通过固定的每月付款,我们指的是每月不会改变的单个数字,而是每月支付的固定金额。

以下变量包含如下所述的值:

余额-信用卡上的未偿还余额

annualInterestRate -以小数表示的年利率

假设利息根据月末的余额按月复利(在支付该月的款项后)。每月付款必须是10美元的倍数,并且在所有月份都是相同的。请注意,使用此支付方案,余额有可能变为负数,这是可以的。以下是所需数学运算的摘要:

月利率=(年利率)/ 12.0

月未付余额=(上一次余额)-(月最低还款额)

每月更新余额=(月度未付余额)+(月利率x月未付余额)

=================================================

测试用例1:

输入你的余额: 3329

输入您的年利率: 0.2

最低支付:310美元

测试用例2:

输入你的余额: 4773

输入您的年利率: 0.2

最低支付:440美元

测试用例3:

输入你的余额: 3926

输入您的年利率: 0.2

最低付款:360美元

从每月10美元开始,计算余额是否会以这种方式在一年内还清(一定要考虑每月累积的利息-这意味着10* 12不起作用).If 10美元的月还款不足以在一年内还清债务,每月增加10美元并重复。

这就是我所拥有的,当我放入余额和利率时,我不能让程序在测试用例中等于最低付款。我还必须使用嵌套循环。

代码语言:javascript
复制
import java.util.Scanner;
public class MinPayment {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter your balance: ");
        double balance = input.nextDouble();
        System.out.print("Enter your Annual Interest Rate: ");
        double rate = input.nextDouble();
        double i = 1;
        rate = rate / 12.0; 
        double payment = 0;
        while (i <= 12) {
            i++;
            balance = balance + (rate * balance);
            while (balance >= 0) {
                payment += 10;
                balance = balance - payment;
            }
        }
        System.out.printf("Lowest Payment: $%.0f", payment);
    }
}
EN

回答 2

Stack Overflow用户

发布于 2015-02-20 04:47:28

代码语言:javascript
复制
double monthlyRate = annualRate / 12.0; 
double monthlyUnpaidBalance;
double prevBalance=balance;
double payment=10;
boolean minPaymentReached=false;

while(true)
{

   prevBalance=balance;

    for(int i=0;i<12;i++)
    {

    monthlyUnpaidBalance=prevBalance-payment; 

        if(monthlyUnpaidBalance<=0)
        {
        minPaymentReached=true;
        break;
        }
        prevBalance=monthlyUnpaidBalance+(monthlyRate*monthlyUnpaidBalance);
    }

    if(minPaymentReached)
    {
    break;
    }
    payment=payment+10;

}

通过将临时变量设置为等于balance,我们保留了初始值,并且能够在while(true)循环开始时将'prevBalance‘设置回balance

票数 0
EN

Stack Overflow用户

发布于 2015-02-20 06:04:20

我认为误差在payment变量中,它增加了10,然后再次从余额中减去。

代码语言:javascript
复制
int i = 1; // Make it an int. Name it 'month'.
rate /= 12.0; 
double payment = 0; // totalPayment
final double SINGLE_PAYMENT = 10;
while (i <= 12) {
    i++;
    balance += rate * balance; 
    if (balance >= SINGLE_PAYMENT) { // Not while, this month only, not 0
        payment += SINGLE_PAYMENT;
        balance -= SINGLE_PAYMENT;
    }
}

速率逻辑需要您考虑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28616355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档