(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: 1.复利计算终值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(" 您的输入错误"); 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("是否选择计算翻倍: 1、翻倍 2、不翻倍"); 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(" 您的输入错误,请重新选择"); 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("请选择 1.按年投资 2.按月投资"); 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(" 您的输入错误,请重新选择"); 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、可能是因为前面定义变量的问题,当输入参数时在输入除了数字外的字符会报错,不知道如何判断,问题还没有解决,待完善。