Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java编程_Java_Java.util.scanner - Fatal编程技术网

用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();
  }
}