用java编程
我需要计算一个人每年支付的贷款利息金额,并显示每年贷款余额的递减情况。我知道如何把数字写在纸上,但我不知道如何为它编写代码,其他论坛也没有任何帮助 例如,它应该是什么样子:用java编程,java,java.util.scanner,Java,Java.util.scanner,我需要计算一个人每年支付的贷款利息金额,并显示每年贷款余额的递减情况。我知道如何把数字写在纸上,但我不知道如何为它编写代码,其他论坛也没有任何帮助 例如,它应该是什么样子: Enter loan amount: 90000 Enter loan duration in years: 15 Enter interest rate as a percent: 6.75 For a 15 year loan of $90000.00 at 6.75% interest Monthly payme
Enter loan amount: 90000
Enter loan duration in years: 15
Enter interest rate as a percent: 6.75
For a 15 year loan of $90000.00 at 6.75% interest
Monthly payment = $ 796.42
Total interest = $ 53355.33
Yearly Balances
Year Interest Loan Balance
1 5965.23 86408.21
2 5715.14 82566.33
3 5447.64 78456.94
4 5161.51 74061.43
5 4855.46 69359.87
6 4528.10 64330.94
7 4177.95 58951.87
8 3803.41 53198.26
9 3402.80 47044.03
10 2974.29 40461.31
11 2515.95 33420.24
12 2025.70 25888.91
13 1501.31 17833.19
14 940.40 9216.58
15 340.45 -0.00
我目前拥有的:
浮动和双精度不应用于货币,因为小数部分并非始终精确 但是,由于必须使用双精度,我建议您将小数点向右移动一点,直到获得所需的所有精度 100.26在任何时候都不会存储在双人床上,但100260.00会存储在双人床上。这样,您就不会丢失重要十进制数字“.26”的精度,并在末尾添加一个精确的额外数字“0”以进行精确舍入(如果需要,否则请停止在“26”) 由于100.26决不能存储在double上(否则可能会丢失十进制精度),因此在将数字传递到double之前,您将以字符串或BigDecimal类型读取用户输入并“乘以”1000。如果您使用字符串,您将找到圆点,将其删除,并在转换为双精度之前将其向右放置2/3个点 因为你将乘以1000,你的双倍最大值将更加有限,但如果你不打算使用巨大的数字,这可能不是一个问题 您将正常使用x*1000执行所有操作,在打印之前,您将双精度传递给一个精确的数据类型,格式化以删除*1000并打印
对于这种样式,您不需要特别使用double,例如可以使用long,但是现在,您可以使用double获得确切的值。在处理货币时,根本不要使用double或float,double和float不存储带perfect的小数precision@gia我在另一个论坛上读到过,但我的教授明确告诉我们,出于某种原因,应该使用双倍。他可能希望你失败,从经验中学习,所以我到底应该如何摊销?我想我需要一个for循环,然后我知道如何获得第一个月的数字,但我不知道如何通过。for循环,将贷款余额保持在100%,计算第一个月的利息和付款,扣除,现在你有新的贷款余额打印所有内容,下一个循环在for上,重复,loanbalance>0时继续循环,如果有麻烦,很抱歉,但我仍然不知道如何操作。我今天有点慢。我原本以为你的问题是没有得到正确的十进制值,我的答案解决了这个问题,但你在那里声称你实际上不知道如何做循环。这太基本了抱歉,您知道如何手动进行计算,所以只需编写代码即可。研究循环,在那里我大致告诉了你循环将如何进行。对不起,我现在让循环工作,我只需要更改它,使它显示每年的数字,而不是每个月。在循环的每个步骤上,你可以计算一整年而不是一个月,否则你可以按月计算,但不是打印,而是创建一个数组并用你的解决方案填充它,然后有一个第二个循环,你将它们相加几十以打印年度值,或者,有一个计数器k,相加到12,和两个用于相加月度结果的变量,在你计算月度值后递增,每当k达到12,打印它们并重置为零。一旦你离开循环,打印最后一次。我明白你在说什么,但不知道怎么做,但我会搜索它并找出答案。(我的教授完全跳过了数组)谢谢你的帮助
import java.util.*;
public class Loan
{
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
int loanAmount, loanDurationYears, month;
double interestRate, monthlyPayment, totalInterest;
System.out.print("Enter loan amount:");
loanAmount = keyboard.nextInt();
System.out.print("Enter loan duration in years:");
loanDurationYears = keyboard.nextInt();
System.out.print("Enter interest rate as a percent:");
interestRate = keyboard.nextDouble();
keyboard.close();
System.out.println("Loan amount: $" + loanAmount);
System.out.println("Loan duration: " + loanDurationYears + " years");
System.out.println("Interest rate: " + interestRate + "%");
monthlyPayment = payment(loanAmount, loanDurationYears, interestRate);
totalInterest = ((monthlyPayment * (loanDurationYears*12))-loanAmount);
printTotals(loanAmount, loanDurationYears, interestRate, monthlyPayment, totalInterest);
}
public static double payment(int loanAmount, int loanDurationYears, double interestRate)
{
int a = loanAmount;
int n = (loanDurationYears*12);
double i = ((interestRate*.01)/12);
double monthlyPayment = a*(Math.pow((1+i),n)*i)/((Math.pow((1+i),n))-1);
return monthlyPayment;
}
public static void printTotals(int loanAmount, int loanDurationYears, double interestRate, double monthlyPayment, double totalInterest)
{
System.out.println("For a " + loanDurationYears + " year loan of $" + loanAmount + " at " + interestRate + "% interest:");
System.out.printf("Monthly payment = $"+ "%.2f", monthlyPayment);
System.out.println();
System.out.printf("Total interest = $"+ "%.2f", totalInterest);
System.out.println();
}
}