java moneyutils_java中每月等额与先息后本计算
1 importjava.math.BigDecimal;2 importjava.math.MathContext;3 importjava.math.RoundingMode;4 importjava.text.NumberFormat;5
6 public classMoneyUtils {7 /**
8 * 标度(小数位数)9 */
10 public static final int SCALE = 10;11
12 /**
13 * 金钱显示标度(小数位数)14 */
15 public static final int MONEYSHOWSCALE = 2;16
17 /**
18 * 利率显示标度(小数位数)19 */
20 public static final int INTERESTRATESHOWSCALE = 4;21
22 /**
23 * 精度24 */
25 public static final int PRECISION = 30;26
27 /**
28 * 保存舍入规则29 */
30 public static final RoundingMode SAVEROUNDINGMODE =RoundingMode.HALF_UP;31
32 /**
33 * 是否舍去小数点最后的零34 */
35 public static boolean STRIPTRAILINGZEROS = true;36
37 /**
38 * 运算上下文(设置精度、舍入规则)39 */
40 public static final MathContext MATHCONTEXT = newMathContext(PRECISION, SAVEROUNDINGMODE);41
42 /**
43 * 每年天数44 */
45 public static final String YEARDAYS = "360";46
47 /**
48 * 每年月数49 */
50 public static final String YEARMOTHS = "12";51
52 /**
53 * 每月天数54 */
55 public static final String MOTHDAYS = "30";56
57 /**
58 * 数字“1”59 */
60 public static final BigDecimal ONE = new BigDecimal(1);61
62 /**
63 * 数字“100”64 */
65 public static final BigDecimal HUNDRED = new BigDecimal(100);66
67 /**
68 * 数字“0.01”69 */
70 public static final BigDecimal ONEHUNDREDTH = new BigDecimal(0.01);71
72 public staticBigDecimal newBigDecimal(String str){73 return (str == null || str.trim().isEmpty()) ? BigDecimal.ZERO : newBigDecimal(str);74 }75
76 /**
77 *
Description: 加法返回格式化结果数字
78 *@paramaddend79 *@paramaugend80 *@return
81 */
82 public staticBigDecimal add(BigDecimal addend, BigDecimal augend){83 returnformatMoney(addend.add(augend, MATHCONTEXT));84 }85
86 /**
87 *
Description: 加法返回格式化结果数字
88 *@paramaddend89 *@paramaugend90 *@return
91 */
92 public staticBigDecimal add(String addend, String augend){93 BigDecimal decimalAddend =newBigDecimal(addend);94 BigDecimal decimalAugend =newBigDecimal(augend);95 returnformatMoney(decimalAddend.add(decimalAugend, MATHCONTEXT));96 }97
98 /**
99 *
Description: 加法返回格式化结果字符串
100 *@paramaddend101 *@paramaugend102 *@return
103 */
104 public staticString addToString(BigDecimal addend, BigDecimal augend){105 returnformatToString(addend.add(augend, MATHCONTEXT));106 }107
108 /**
109 *
Description: 加法返回格式化结果字符串
110 *@paramaddend111 *@paramaugend112 *@return
113 */
114 public staticString addToString(String addend, String augend){115 BigDecimal decimalAddend =newBigDecimal(addend);116 BigDecimal decimalAugend =newBigDecimal(augend);117 returnformatToString(decimalAddend.add(decimalAugend, MATHCONTEXT));118 }119
120 /**
121 *
Description: 减法返回格式化结果数字
122 *@paramminuend123 *@paramsubtrahend124 *@return
125 */
126 public staticBigDecimal subtract(BigDecimal minuend, BigDecimal subtrahend){127 returnformatMoney(minuend.subtract(subtrahend, MATHCONTEXT));128 }129
130
131 /**
132 *
Description: 减法返回格式化结果数字
133 *@paramminuend134 *@paramsubtrahend135 *@return
136 */
137 public staticBigDecimal subtract(String minuend, String subtrahend){138 BigDecimal decimalMinuend =newBigDecimal(minuend);139 BigDecimal decimalSubtrahend =newBigDecimal(subtrahend);140 returnformatMoney(decimalMinuend.subtract(decimalSubtrahend, MATHCONTEXT));141 }142
143 /**
144 *
Description: 减法返回格式化结果字符串
145 *@paramminuend146 *@paramsubtrahend147 *@return
148 */
149 public staticString subtractToString(BigDecimal minuend, BigDecimal subtrahend){150 returnformatToString(minuend.subtract(subtrahend, MATHCONTEXT));151 }152 /**
153 *
Description: 减法返回格式化结果字符串
154 *@paramminuend155 *@paramsubtrahend156 *@return
157 */
158 public staticString subtractToString(String minuend, String subtrahend){159 BigDecimal decimalMinuend =newBigDecimal(minuend);160 BigDecimal decimalSubtrahend =newBigDecimal(subtrahend);161 returnformatToString(decimalMinuend.subtract(decimalSubtrahend, MATHCONTEXT));162 }163
164 /**
165 *
Description: 乘法返回格式化结果数字
166 *@parammultiplier167 *@parammultiplicand168 *@return
169 */
170 public staticBigDecimal multiply(BigDecimal multiplier, BigDecimal multiplicand){171 returnformatMoney(multiplier.multiply(multiplicand, MATHCONTEXT));172 }173
174
175 /**
176 *
Description: 乘法返回格式化结果数字
177 *@parammultiplier178 *@parammultiplicand179 *@return
180 */
181 public staticBigDecimal multiply(String multiplier, String multiplicand){182 BigDecimal decimalMultiplier =newBigDecimal(multiplier);183 BigDecimal decimalMultiplicand =newBigDecimal(multiplicand);184 returnformatMoney(decimalMultiplier.multiply(decimalMultiplicand, MATHCONTEXT));185 }186
187 /**
188 *
Description: 乘法返回格式化结果字符串
189 *@parammultiplier190 *@parammultiplicand191 *@return
192 */
193 public staticString multiplyToString(BigDecimal multiplier, BigDecimal multiplicand){194 returnformatToString(multiplier.multiply(multiplicand, MATHCONTEXT));195 }196 /**
197 *
Description: 乘法返回格式化结果字符串
198 *@parammultiplier199 *@parammultiplicand200 *@return
201 */
202 public staticString multiplyToString(String multiplier, String multiplicand){203 BigDecimal decimalMultiplier =newBigDecimal(multiplier);204 BigDecimal decimalMultiplicand =newBigDecimal(multiplicand);205 returnformatToString(decimalMultiplier.multiply(decimalMultiplicand, MATHCONTEXT));206 }207
208 /**
209 *
Description: 除法返回格式化结果数字
210 *@paramdividend211 *@paramdivisor212 *@return
213 */
214 public staticBigDecimal divide(BigDecimal dividend, BigDecimal divisor){215 returnformatMoney(dividend.divide(divisor, MATHCONTEXT));216 }217 /**
218 *
Description: 除法返回格式化结果数字
219 *@paramdividend220 *@paramdivisor221 *@return
222 */
223 public staticBigDecimal divide(String dividend, String divisor){224 BigDecimal decimalDividend =newBigDecimal(dividend);225 BigDecimal decimalDivisor =newBigDecimal(divisor);226 returnformatMoney(decimalDividend.divide(decimalDivisor, MATHCONTEXT));227 }228
229 /**
230 *
Description: 除法返回格式化结果字符串
231 *@paramdividend232 *@paramdivisor233 *@return
234 */
235 public staticString divideToString(BigDecimal dividend, BigDecimal divisor){236 returnformatToString(dividend.divide(divisor, MATHCONTEXT));237 }238
239 /**
240 *
Description: 除法返回格式化结果字符串
241 *@paramdividend242 *@paramdivisor243 *@return
244 */
245 public staticString divideToString(String dividend, String divisor){246 BigDecimal decimalDividend =newBigDecimal(dividend);247 BigDecimal decimalDivisor =newBigDecimal(divisor);248 returnformatToString(decimalDividend.divide(decimalDivisor, MATHCONTEXT));249 }250 /**
251 *
Description: 月利率计算
252 *@paramyearInterestRate253 *@return
254 */
255 public staticBigDecimal monthInterestRate(BigDecimal yearInterestRate){256 BigDecimal dayInterestRate = MoneyUtils.divide(yearInterestRate, YEARDAYS).setScale(5, RoundingMode.CEILING);257 System.err.println(dayInterestRate);258 BigDecimal monthInterestRate =dayInterestRate.multiply(newBigDecimal(MOTHDAYS));259 System.err.println(monthInterestRate);260 returnmonthInterestRate;261 }262
263 /**
264 *
Description: 按既定小数位数格式化金额保存
265 *@paramresult266 *@return
267 */
268 public staticBigDecimal formatMoney(BigDecimal result){269 returnresult.setScale(SCALE, SAVEROUNDINGMODE);270 }271
272 /**
273 *
Description: 按既定小数位数格式化金额显示
274 *@paramresultStr 要格式化的数275 *@parammultiple 乘以的倍数276 *@return
277 */
278 public staticString formatMoneyToShow(String resultStr, BigDecimal multiple){279 BigDecimal result =newBigDecimal(resultStr);280 returnMoneyUtils.formatToString(MoneyUtils.formatMoneyToShow(result, multiple));281 }282
283 /**
284 *
Description: 按既定小数位数格式化金额显示
285 *@paramresult 要格式化的数286 *@parammultiple 乘以的倍数287 *@return
288 */
289 public staticBigDecimal formatMoneyToShow(BigDecimal result, BigDecimal multiple){290 returnresult.multiply(multiple).setScale(MONEYSHOWSCALE, SAVEROUNDINGMODE);291 }292
293 /**
294 *
Description: 按既定小数位数格式化利率显示
295 *@paramresult 要格式化的数296 *@parammultiple 乘以的倍数297 *@return
298 */
299 public staticBigDecimal formatInterestRateToShow(BigDecimal result, BigDecimal multiple){300 returnresult.multiply(multiple).setScale(INTERESTRATESHOWSCALE, SAVEROUNDINGMODE);301 }302
303 /**
304 *
Description: 按既定小数位数格式化显示
305 *@paramresult 要格式化的数306 *@paramscale 显示标度(小数位数)307 *@return
308 */
309 public static BigDecimal formatToShow(BigDecimal result, intscale){310 returnresult.setScale(scale, SAVEROUNDINGMODE);311 }312
313 /**
314 *
Description: 格式化为字符串,进行去零不去零操作
315 *@paramresult316 *@return
317 */
318 public staticString formatToString(BigDecimal result){319 if(result == null){320 return "";321 }else{322 return STRIPTRAILINGZEROS ?result.stripTrailingZeros().toPlainString() : result.toPlainString();323 }324 }325
326 /**
327 *
Description: 按既定小数位数格式化为货币格式
328 *@paramresult329 *@return
330 */
331 public staticString formatToCurrency(BigDecimal result){332 BigDecimal temp =result.divide(HUNDRED, SAVEROUNDINGMODE);333 NumberFormat numberFormat =NumberFormat.getCurrencyInstance();334 return numberFormat.format(STRIPTRAILINGZEROS ?temp.stripTrailingZeros() : temp);335 }336
337 public staticString formatToPercent(BigDecimal result){338 BigDecimal temp =result.divide(HUNDRED, SAVEROUNDINGMODE);339 NumberFormat numberFormat =NumberFormat.getPercentInstance();340 return numberFormat.format(STRIPTRAILINGZEROS ?temp.stripTrailingZeros() : temp);341 }342
343 /**
344 *
Description:格式化数字为千分位显示;
345 *@paramtext346 *@return
347 */
348 public staticString fmtMicrometer(String text){349 DecimalFormat df = null;350 if(text.indexOf(".") > 0) {351 if(text.length() - text.indexOf(".")-1 == 0){352 df = new DecimalFormat("###,##0.");353 }else if(text.length() - text.indexOf(".")-1 == 1){354 df = new DecimalFormat("###,##0.0");355 }else{356 df = new DecimalFormat("###,##0.00");357 }358 }else{359 df = new DecimalFormat("###,##0.00");360 }361 double number = 0.0;362 try{363 number =Double.parseDouble(text);364 } catch(Exception e) {365 number = 0.0;366 }367 returndf.format(number);368 }369
370 }
java moneyutils_java中每月等额与先息后本计算相关推荐
- java中每月等额与先息后本计算
一般信用贷款会提供两种还款方式:每月等额或者先息后本.每月等额,就是每月归还等同的部分本金和利息,你手里在使用的本金其实是逐月减少的.先息后本就是先还利息,到期归还本金. 每月等额 1 import ...
- java编写中显示内部外部,jdk安装好后在cmd上输入java正常,输入javac就显示不是内部外部命令...
点击查看jdk安装好后在cmd上输入java正常,输入javac就显示不是内部外部命令具体信息 答:(1)新建->变量名"JAVA_HOME",变量值"C:\Jav ...
- java通过按钮打开新窗口_如何在java程序中,当点击一个按钮后,关闭当前窗口,开启一个新的窗口。...
JButton btn=new JButton(new AbstractAction("关闭并打开") { @Override public void actionP ...
- Java web中使用JQuery加载某页面后,自动调用Servlet(GET方法,POST方法)
目录 背景 演示 源码 背景 比如需要在页面加载后,干某些事情,就需要自动调用Servlet去调用Java代码,以达到某种功能. 演示 web网页搭建好后,进入这个web页面,自动调用Servlet ...
- java stream中Collectors的用法
文章目录 简介 Collectors.toList() Collectors.toSet() Collectors.toCollection() Collectors.toMap() Collecto ...
- Java 7中对String.substring的更改
众所周知,在您生成相同源字符串的许多子字符串的情况下,Java会优化子字符串操作. 它通过使用(value, offset, count)存储信息的方式来做到这一点. 请参阅以下示例: 在上图中,您会 ...
- Java黑皮书课后题第5章:**5.21(金融应用:比较不同利率下的贷款)编写程序,让用户输入输入贷款总额和以年为单位的贷款期限,然后显示利率从5%到8%每次递增1/8的各种利率下,每月支付额和总支付
**5.21(金融应用:比较不同利率下的贷款)编写程序,让用户输入输入贷款总额和以年为单位的贷款期限,然后显示利率从5%到8%每次递增1/8的各种利率下,每月支付额和总支付 题目 题目概述 运行示例 ...
- 计算贷款的每月支付额。程序要求用户输入贷款的年利率、总金额 和年数,程序计算每月支付金额,并将结果显示输出。计算贷款的月支付额公式如下:(Java课本练习题 题目要求 )
2.7 package booksTest;import java.util.Scanner;public class p34_2_7 {public static void main(String[ ...
- java语言中标识符大小写不敏感_下列叙述中,正确的是()。A.Java语言的标识符是区分大小写的B.源文件名与public类名可...
下列叙述中,正确的是().A.Java语言的标识符是区分大小写的B.源文件名与public类名可 更多相关问题 [单选,A1型题] 有关血栓闭塞性脉管炎的说法,下列不恰当的是() [判断题] 用拉伸塑 ...
最新文章
- 《数据中台实战》:数据中台的分层建模体系
- wxWidgets:使用自定义对话框
- 24行代码AC_蓝桥杯2019省赛 试题 D: 数的分解
- python面试题之请谈谈.pyc文件和.py文件的不同之处
- linux acpidtd 进程,clover引导卡在该图上了,求资助
- SPSS做因子分析(非常细致的过程)
- (C++后台面经)网络编程1
- 裂变!裂变!这里有一份完整的微信流量裂变指南
- docker网络配置和4G网卡关系 小白笔记
- android 实现谷歌地图
- 华云数字实名认证图片_“云联盟华云数字”是云数贸传销组织衍生平台!不要被骗了...
- 202.微信公众号开发【图文消息】
- Qt绘 —— QPixmap 的使用
- java 类转换_java实体类转换有没有更优雅的方式?
- 如何在xcode7上打包越狱系统可用的ipa文件
- 刷机风暴—3Q大战第二季
- ZWAVE Alarm Report Command
- IntelliJ IDEA:xxx is not acceptable
- 小说app搭建—如何搭建小说分销系统?
- 全球10大智慧城市大数据应用案例
热门文章
- python字典的键可以是int吗_Python:大int键的快速字典
- php yaf框架和icon,php中Yaf框架是什么?
- jersey2.22.2异常java.lang.NoSuchMethodError: org.glassfish.jersey.CommonProperties.getValue
- plsql只提交存储过程里的事务_plsql 存储过程 事务
- 将Vba代码转换成Php代码,将这个Excel公式转换成VBA代码(函数)
- 计算机二级省份,【计算机二级】这些省份发布报名时间!调整前的最后一次考试!...
- mysql 数据库复制软件_mysql 快速复制数据库
- 纵坐标范围_探索频率范围与频响的奥秘
- java 动软_动软代码生成器下载_2017动软代码生成器下载及相关推荐 - noYes软件大全...
- DS4800 用串口登陆0.1改成85状态