小李买车贷款(此处假定贷款20万),4S店提供的贷款为与某银行信用卡中心合作,实际是给用户发行了一张大额信用卡,手续费年费率为3%,银行的手续费年费率最低不低于(即大于等于) 1%,最高不超过(即小于等于) 18%。采用手续费费率的意思是用户每年需要缴纳的手续费均为20万0.03=6000元,分摊到12个月,则每期手续费为500元,同时每月需要偿还的本金为总金额/总期教。故用户每个月需要还款为 每期手续费+月偿还本金,仍以上述贷款20万元贷款2年计算,用户每个月还款金额为 20100000.03/12+2010000/24=8833.33元 现在银监会要求费率计算形式需要改为利率展现方式,拟采用单利形式显示年化利率所谓单利的计算方式,要求每个月偿还的金额必须大于该月产生的利息。且 当月利息=当月剩余本金*年化利率/12 假设上述的每月还款金额完全不变,请计算当前的费率折合为单利计息方式下的最接近利率(利率显示精确到小数点后四位。比如年利率4.35%,则输出为0.0435), 输入 s:x:m 其中s为贷款总金额(单位元),X为每年手费费率(不带百分号),m表示贷款期数。上述贷款20万,手费3%,贷款两年(24期)的输入为200000,0.03,24 用java编程
时间: 2024-04-01 09:37:18 浏览: 135
基于stm32的智能车
以下是 Java 代码实现:
```java
import java.util.Scanner;
public class LoanCalculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入贷款总金额(单位:元):");
int totalAmount = scanner.nextInt();
System.out.print("请输入每年手续费费率(不带百分号):");
double feeRate = scanner.nextDouble();
System.out.print("请输入贷款期数(单位:月):");
int periods = scanner.nextInt();
double monthlyFee = totalAmount * feeRate / 12;
double monthlyInterest = 0;
double monthlyPayment = totalAmount * (1 + feeRate * periods / 12) / periods;
double lowRate = feeRate / periods;
double highRate = 0.18 / 12;
while (highRate - lowRate >= 1e-6) {
double midRate = (lowRate + highRate) / 2;
double remainingAmount = totalAmount;
for (int i = 0; i < periods; i++) {
monthlyInterest = remainingAmount * midRate;
monthlyPayment = monthlyFee + monthlyInterest;
remainingAmount -= monthlyPayment - monthlyFee;
if (monthlyPayment <= monthlyInterest) {
lowRate = midRate;
break;
}
}
if (remainingAmount > 0) {
highRate = midRate;
}
}
System.out.printf("折合为单利计息方式下的最接近利率为:%.4f%%\n", lowRate * 12 * 100);
}
}
```
代码逻辑如下:
1. 读入贷款总金额、每年手续费费率和贷款期数;
2. 计算每月手续费、每月利息和每月还款金额;
3. 初始化二分查找的上下界;
4. 在每次迭代中,计算中间值,然后按照该利率计算每个月的还款金额和剩余本金;
5. 如果某个月的还款金额小于等于利息,则说明该利率过低,需要将上界调整为中间值;
6. 如果贷款期数结束后仍有剩余本金,则说明该利率过高,需要将下界调整为中间值;
7. 循环迭代,直到找到最接近的利率;
8. 输出结果。
注意,该代码仅供参考,实际应用中还需要进行输入格式和异常处理等。
阅读全文