在网上找蚂蚁借呗的计算方式,全是一堆计算不准确的算法,都是按整月来算的(每个月的天数不一样),但是蚂蚁借呗是按天算的,而且还是固定还款日,如我2月22日借款到3月10日还第一期,使用时间只有17天,所以每期的使用时间又不相同,但是又要求每期还款(本金+利息)尽量平均

以下是我自己琢磨的方法,唯一缺点是:在有一些数字是比借呗多一个0.01的平均数(误差)或少一个0.01的平均数(误差)

java

 public static void main(String[] args){mayiLend(new BigDecimal(Double.toString(10000)),new BigDecimal(Double.toString(0.00035)),new BigDecimal(Double.toString(3)));}static void mayiLend(final BigDecimal total, BigDecimal rate, BigDecimal period){//total总额  rate日利率   period期数Calendar[] dates=new Calendar[period.intValue()];Calendar now=Calendar.getInstance();setTimeToMidnight(now);int now_year = now.get(Calendar.YEAR);int now_month = now.get(Calendar.MONTH);int now_day = now.get(Calendar.DAY_OF_MONTH);int year=now_year;int month=now_month;int day=10;//每月10号Repayment repays[]=new Repayment[period.intValue()];//保存每期还款信息for(int i=0;i<period.intValue();i++){repays[i]=new Repayment();if(++month>11){month=0;year++;}Calendar c=Calendar.getInstance();setTimeToMidnight(c);c.set(Calendar.YEAR, year);c.set(Calendar.MONTH, month);c.set(Calendar.DAY_OF_MONTH, day);dates[i]=c;}BigDecimal average=total.divide(period,2, BigDecimal.ROUND_DOWN);//平均每月还款,最开始设为贷款总额/期数BigDecimal remain=null;//剩余未还的BigDecimal step=new BigDecimal(Double.toString(0.01));do {if(remain!=null) {average = average.add(remain.divide(period, 2, BigDecimal.ROUND_DOWN));//平均还款=平均还款(上次)+(剩余(上次)/期数)  保留两位小数点}remain = total;long lastTime = now.getTimeInMillis();for (int i = 0; i < period.intValue(); i++) {long rePlayTime = dates[i].getTimeInMillis();//还款时间BigDecimal days = new BigDecimal(Double.toString(millisecondsToDays(rePlayTime - lastTime)));//计算与上一次还款日间隔(天数)BigDecimal interest =days.multiply(rate).multiply(remain).setScale(2,BigDecimal.ROUND_DOWN);//计算当期利息,天数*日利率*剩余未还金额BigDecimal principal = average.subtract(interest);repays[i].date=dates[i];repays[i].interest =interest;repays[i].principal =principal;remain=remain.subtract(principal);if(i==period.intValue()-1){//最后一次还款加上(或减)余数repays[i].principal =repays[i].principal.add(remain);}repays[i].payment =interest.add(repays[i].principal);lastTime = rePlayTime;}}while(remain.abs().compareTo(step.multiply(period))>=0);//如果剩余未还的绝对值大于等于(期数*0.01),则继续分割for(int i=0;i<period.intValue();i++){Repayment repay=repays[i];System.out.println("第"+(i+1)+"期  时间:"+repay.date.get(Calendar.YEAR)+"年"+(repay.date.get(Calendar.MONTH)+1)+"月"+repay.date.get(Calendar.DAY_OF_MONTH)+"日 还款:"+repay.payment+" = 本金:"+repays[i].principal +" + 利息:"+repays[i].interest);}}static class Repayment {Calendar date;BigDecimal interest;BigDecimal principal;BigDecimal payment;}static void setTimeToMidnight(Calendar calendar) {//设置每天12点0分0秒为分割点calendar.set(Calendar.HOUR_OF_DAY, 12);calendar.set(Calendar.MINUTE, 0);calendar.set(Calendar.SECOND, 0);}static int millisecondsToDays(long intervalMs) {//计算天数return (int) (intervalMs / (1000 * 86400));}在这里插入代码片

测试

mayiLend(new BigDecimal(Double.toString(10000)),new BigDecimal(Double.toString(0.00035)),new BigDecimal(Double.toString(3)));

打印
第1期 时间:2020年3月10日 还款:3389.02 = 本金:3329.52 + 利息:59.50
第2期 时间:2020年4月10日 还款:3389.02 = 本金:3316.65 + 利息:72.37
第3期 时间:2020年5月10日 还款:3389.04 = 本金:3353.83 + 利息:35.21
对比借呗

但是如果把代款额度改为10008

mayiLend(new BigDecimal(Double.toString(10008)),new BigDecimal(Double.toString(0.00035)),new BigDecimal(Double.toString(3)));

打印
第1期 时间:2020年3月10日 还款:3391.73 = 本金:3332.19 + 利息:59.54
第2期 时间:2020年4月10日 还款:3391.73 = 本金:3319.30 + 利息:72.43
第3期 时间:2020年5月10日 还款:3391.75 = 本金:3356.51 + 利息:35.24

这时借呗

这里就对不上了,原因是估值平均还款少了一个0.01,但搞不懂借呗是怎么判断还要再加估值平均值的,
有时还乘0.02会在最后一次还款上补全,有时又是最后一次减去多还的

蚂蚁借呗每月等额计算方式相关推荐

  1. java 等额本息计算方式

    投资理财,等额本息计算方式 以下按照10000元,以年利率15.5%,投资期限为6个月,以等额本息方式偿还来计算 /*** 等额本息计算*/ public class PrincipalAndInte ...

  2. 蚂蚁借呗和京东金条全面对比,哪个更划算?

    阿里巴巴和京东作为电商的两大巨头,除了电商之外,在金融领域也是竞争白热化,作为两大电商的金融产品,蚂蚁借呗和京东金条深受广大朋友喜欢,那这两个产品中哪个更合适呢? 下面我们就来对比一下这两个产品: 一 ...

  3. 蚂蚁借呗总利息计算——每月等额(等额本息)

    注:花了半天研究了一下蚂蚁借呗的利息计算,起因是一次以为比较简单的计算发现借呗上实际利息比算出来的要多好几块钱,这就有点疑惑了. 说明: 特别说明的只有两点 利息分两部分:第一部分,距最近一个还款日期 ...

  4. 1、模拟蚂蚁借呗—利息计算

    模拟蚂蚁借呗-利息计算 程序的源代码如下: /*2017年6月11日10:15:49功能:计算蚂蚁借呗的利息缺点:本程序没有判断年份是否为闰年借款当日的时间需要手动输入,年份不能以特定的格式显示没有还 ...

  5. 计算贷款的每月支付额。程序要求用户输入贷款的年利率、总金额 和年数,程序计算每月支付金额,并将结果显示输出。计算贷款的月支付额公式如下:(Java课本练习题 题目要求 )

    2.7 package booksTest;import java.util.Scanner;public class p34_2_7 {public static void main(String[ ...

  6. java中每月等额与先息后本计算

    一般信用贷款会提供两种还款方式:每月等额或者先息后本.每月等额,就是每月归还等同的部分本金和利息,你手里在使用的本金其实是逐月减少的.先息后本就是先还利息,到期归还本金. 每月等额 1 import ...

  7. 网络贷款利息的计算方式

    网络贷款利息的计算方式 1 多数人都不熟悉贷款利息的计算方式,这篇博客介绍怎么计算贷款利息,以及网贷可能存在的套路. 2 网络贷款利息的计算方式一般有三种: 等额本息 等额本金 等本等息 其实还有一种 ...

  8. 信用卡透支循环利息的这种计算方式

    日前,某银行客户李小姐向315消费电子投诉网(http://www.315ts.net/article/article.asp?id=4089)反映,其信用卡欠款100元却产生了300多元利息的问题. ...

  9. Java黑皮书课后题第5章:**5.21(金融应用:比较不同利率下的贷款)编写程序,让用户输入输入贷款总额和以年为单位的贷款期限,然后显示利率从5%到8%每次递增1/8的各种利率下,每月支付额和总支付

    **5.21(金融应用:比较不同利率下的贷款)编写程序,让用户输入输入贷款总额和以年为单位的贷款期限,然后显示利率从5%到8%每次递增1/8的各种利率下,每月支付额和总支付 题目 题目概述 运行示例 ...

最新文章

  1. Nodejs Hello world benchmark
  2. B端运营级视频服务技术平台搭建
  3. 祝大家狗年家庭事业旺旺旺
  4. Linux 源代码阅读知识点及要求
  5. 【安全】This base cannot be created with PLA.
  6. android开发关掉发现更新的官方版本,XUpdate:轻量级、高可用性的 Android 版本更新框架...
  7. 190628 - 解决新版本LastPass没有谷歌套件时打开就闪退的问题.md
  8. i.MX6 设备树 GPIO 默认值
  9. 【牛腩】发布 牛腩新闻发布系统
  10. 爬虫:requests BeautifulSoup 实战案例
  11. unity3d Md5打包与版本更新
  12. 软件测试工程师工作总结
  13. 阿里云云计算ACP学习(六)---阿里云负载均衡服务SLB
  14. 微信怎样连电脑连接到服务器ip,如何把微信小视频传到电脑上?(ipone也适用)...
  15. 致远oa wpsassistservlet任意文件上传漏洞
  16. 程序员如何快速上手一个自己不太熟悉的新项目
  17. 学术报告PPT的latex模板
  18. 阿里云国际版核心渠道商
  19. 开源工作流BPM软件JFlow安装配置视频教程
  20. CSS核心内容:标准流、盒子模型、浮动、定位

热门文章

  1. 云计算与大数据技术应用 第三章
  2. 计算菲波那切数列前50项
  3. item_password-获得1688平台淘口令真实url,1688短链接搜索商品接口接入解决方案
  4. 计算机utp,UTP网线
  5. 一文搞懂候选码、主码、全码、外码、主属性、主键、主关键字、非主属性清晰总结
  6. 博客专家贡献(2022年至今)--2022-11-29(转)
  7. 读jquery 权威指南[2]-事件
  8. 关于定义结构体类型的步骤以及应注意的细节
  9. 数据分析小项目01 __《少年的你》豆瓣短评__V1.0
  10. 前端类库开发最佳实践