复利计算2.0 3.0

 

(03/12)复利计算2.0

一、要求:

客户提出:

2.如果按照单利计算,本息又是多少呢?

3.假如30年之后要筹措到300万元的养老金,平均的年回报率是3%,那么,现在必须投入的本金是多少呢?

完成23功能,并成功PUSH到github上。

二、使用工具和功能介绍

1、用到语言是Java语言,工具:MyEclipse10,JDK:jdk1.6.0_23

2、可以实现的功能:顾客通过输入1、2、3选择复利计算终值、复利计算本金或者单利计算利息。如果输入除了1、2、3外的数会显示输入错误并要求重新输入。选择了其中的一个会进入对应的计算公式得出计算结果。还在继续完善中。。。


三、2.0实验结果截图:


 

 四、代码如下:

 1 import java.util.Scanner;
 2 
 3 public class fuli {
 4 
 5     /**
 6      * @param args
 7      */
 8     public static void main(String[] args) {
 9         // TODO Auto-generated method stub
10         Scanner caculate = new Scanner(System.in);
11         int a = 0;
12         while (a == 0 || a == 1 || a == 2 || a == 3) {
13             System.out.println("请选择1/2/3:\n1.复利计算终值2.复利计算本金3.单利计算本息");
14             int a1 = caculate.nextInt();
15             if (a1 == 1) {
16                 fuli.CFutureValue();
17                 break;
18             } else if (a1 == 2) {
19                 fuli.CPresentValue();
20                 break;
21             }
22 
23             else if (a1 == 3) {
24                 fuli.PrincipalAndInterest();
25                 break;
26             } else {
27                 System.out.println("\n您的输入错误");
28                 a1 = a;
29             }
30         }
31     }
32 
33     // 复利计算终值
34     static void CFutureValue() {
35         Scanner fuli = new Scanner(System.in);
36         System.out.println("请输入本金:");
37         double PresentValue = fuli.nextDouble(); // 本金
38         System.out.println("请输入存款年数:");
39         int year = fuli.nextInt(); // 存钱年数
40         System.out.println("请输入利率:");
41         double r = fuli.nextDouble(); // 利率
42         double sum = 1;
43         for (int i = 1; i <= year; i++) {
44             sum = (1 + r) * sum;
45         }
46         System.out.println("总额为:" + sum * PresentValue);
47     }
48 
49     // 复利计算本金
50     static void CPresentValue() {
51 
52         Scanner fuli = new Scanner(System.in);
53         System.out.println("请输入终值:");
54         double sum = fuli.nextDouble(); // 终值
55         System.out.println("请输入存款年数:");
56         int year = fuli.nextInt(); // 存钱年数
57         System.out.println("请输入利率:");
58         double r = fuli.nextDouble(); // 利率
59         double PresentValue = 1;
60         for (int i = 1; i <= year; i++) {
61             PresentValue = (1 + r) * PresentValue;
62         }
63         System.out.println("总额为:" + sum * (1 / PresentValue));
64     }
65 
66     // 单利计算本息
67     static void PrincipalAndInterest() {
68         Scanner danli = new Scanner(System.in);
69         System.out.println("请输入本金:");
70         double PresentValue = danli.nextDouble(); // 本金
71         System.out.println("请输入存款年数:");
72         int Annuity = danli.nextInt(); // 存钱年数
73         System.out.println("请输入利率:");
74         double r = danli.nextDouble(); // 利率
75         double sum1 = 1;
76         sum1 = (1 + r * Annuity) * PresentValue;
77         System.out.println("本息为:" + sum1);
78     }
79 
80 }

 

 

(03/17)复利计算3.0

 一、要求:

4.利率这么低,复利计算收益都这么厉害了,如果拿100万元去买年报酬率10%的股票,若一切顺利,过多长时间,100万元就变成200万元呢? 

5.如果我希望在十年内将100万元变成200万元,应该找到报酬率在多少的投资工具来帮助我达成目标?如果想在5年后本金翻倍,报酬率就应至少为多少才行呢?

6.如果每年都将积蓄的3万元进行投资,每年都能获得3%的回报,然后将这些本利之和连同年金再投入新一轮的投资,那么,30年后资产总值将变为多少?如果换成每月定投3000呢?

二、功能介绍

相比2.0增加了客户提出的功能,可以计算获取复利终值的年限、计算报酬率、计算每年或每月定期投资所得终值,当计算完成时会显示本次计算结束的字眼。把输出的得数改成小数点后面的只保留两位。

三、3.0实验结果截图:

 

 

四、补充代码如下:

 1 // 4.计算年限
 2     static void CYear() {
 3         Scanner fuli = new Scanner(System.in);
 4         System.out.println("请输入本金:");
 5         double PresentValue = fuli.nextDouble(); // 本金
 6         System.out.println("请输入复利终值:");
 7         double FutureValue = fuli.nextInt(); // 复利终值
 8         System.out.println("请输入利率:");
 9         double r = fuli.nextDouble(); // 报酬率
10         int year = (int) ((Math.log(FutureValue) / Math.log(1 + r)) - (Math
11                 .log(PresentValue) / Math.log(1 + r)));
12         System.out.println("所需年限为:" + year);
13 
14     }
15 
16     // 5.计算报酬率
17     static void Rate() {
18         Scanner fuli = new Scanner(System.in);
19         int a = 0;
20         while (a == 0) {
21             System.out.println("是否选择计算翻倍:\n1、翻倍\n2、不翻倍");
22             int a1 = fuli.nextInt();
23             if (a1 == 2) {
24                 System.out.println("请输入本金:");
25                 double PresentValue = fuli.nextDouble(); // 本金
26                 System.out.println("请输入复利终值:");
27                 double FutureValue = fuli.nextInt(); // 复利终值
28                 System.out.println("请输入存款年数:");
29                 int year = fuli.nextInt(); // 存钱年数
30                 double r = (Math.pow(FutureValue / PresentValue, 1.0 / year)) - 1;
31                 System.out.println("年利率为:" + (float)(Math.round(r*100))/100);
32                 break;
33             } else if (a1 == 1) {
34                 System.out.println("请输入几年后:");
35                 int year = fuli.nextInt();
36                 System.out.println("翻几番:");
37                 int FutureValue = fuli.nextInt();
38                 double r = 72.0 / (year / FutureValue); // 72法则
39                 System.out.println(year + "年后本金翻倍的年利率至少为:" + (float)(Math.round(r*100))/100);
40                 break;
41             } else {
42                 System.out.println("\n您的输入错误,请重新选择");
43                 a1 = a;
44             }
45         }
46 
47     }
48 
49     // 6.计算按每年或每月定期投资的终值
50     static void regular() {
51         Scanner fuli = new Scanner(System.in);
52         int a = 0;
53         while (a == 0) {
54             System.out.println("请选择\n1.按年投资\n2.按月投资");
55             int a1 = fuli.nextInt();
56             if (a1 == 1) {
57                 System.out.println("要投资的本金:");
58                 double P = fuli.nextDouble();
59                 System.out.println("获得的年回报率:");
60                 double r = fuli.nextDouble();
61                 System.out.println("投资年限(年):");
62                 double Y = fuli.nextInt();
63 
64                 double F = P * (Math.pow(1 + r, Y) - 1) / r;
65                 System.out.println("按年投资的年金终值为:" + (float)(Math.round(F*100))/100);
66 
67                 break;
68             }
69 
70             else if (a1 == 2) {
71                 System.out.println("要投资的本金:");
72                 double P = fuli.nextDouble();
73                 System.out.println("获得的月回报率:");
74                 double r = fuli.nextDouble();
75                 System.out.println("投资年限(月):");
76                 double Y = fuli.nextInt();
77                 double F = P * (Math.pow(1 + r / 12.0, Y * 12) - 1) / (r / 12);
78                 System.out.println("按月投资的年金终值为:" + (float)(Math.round(F*100))/100);
79                 break;
80             } else {
81                 System.out.println("\n您的输入错误,请重新选择");
82                 a1 = a;
83             }
84         }
85 
86     }

 (03/19)复利计算3.0

 一、要求:

7. 你写的程序能让客户随意操作吗?误输入数据、不小心做了非常规的操作程序是什么反应? 

    相互观赏程序运行情况。

8. 如果向银行贷款10万元,年利率6.5%,期限为10年,那么每月等额本息还款多少?(算复利条件下等额还款金额)

改善完成至要求8,并成功PUSH到github上。

二、内容和功能

在原来的基础上增加了要求8的功能。

程序不能让客户随意操作,在选择的时候如果输入数字选择错误了,会让顾客重选,计算结束后会说明本次计算结束。

三、3.0实验结果截图:

 

四、补充代码如下:

 1     //7.每月等额本息还款
 2     //每月还款金额 = (贷款本金 / 还款月数)+(本金 — 已归还本金累计额)×每月利率
 3     //等额本息计算公式:〔贷款本金×月利率×(1+月利率)^还款月数〕÷〔(1+月利率)^还款月数-1〕
 4     static void reimbursement() {
 5         Scanner fuli = new Scanner(System.in);
 6         System.out.println("请输入贷款本金:");
 7         double P = fuli.nextDouble(); // 贷款本金
 8         System.out.println("请输入还年限:");
 9         int Y = fuli.nextInt(); // 还款年限
10         System.out.println("请输入年利率:");
11         double r = fuli.nextDouble(); // 年利率
12         
13         double reimbursement=(P*(r/2)*Math.pow(1+(r/12), Y*12))/(Math.pow(1+(r/12),Y*12)-1);
14         System.out.println("总额为:" + (float)(Math.round(reimbursement*100))/100);
15     }
16 
17 }

五、问题

1、保留两位小数的方法好像不太对,有时候只保留一位或者不保留。2、可能是因为前面定义变量的问题,当输入参数时在输入除了数字外的字符会报错,不知道如何判断,问题还没有解决,待完善。

 

posted @ 2016-03-17 22:03  02杨晶晶  阅读(416)  评论(1编辑  收藏  举报