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中每月等额与先息后本计算相关推荐

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

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

  2. java编写中显示内部外部,jdk安装好后在cmd上输入java正常,输入javac就显示不是内部外部命令...

    点击查看jdk安装好后在cmd上输入java正常,输入javac就显示不是内部外部命令具体信息 答:(1)新建->变量名"JAVA_HOME",变量值"C:\Jav ...

  3. java通过按钮打开新窗口_如何在java程序中,当点击一个按钮后,关闭当前窗口,开启一个新的窗口。...

    JButton btn=new JButton(new AbstractAction("关闭并打开") {      @Override   public void actionP ...

  4. Java web中使用JQuery加载某页面后,自动调用Servlet(GET方法,POST方法)

    目录 背景 演示 源码 背景 比如需要在页面加载后,干某些事情,就需要自动调用Servlet去调用Java代码,以达到某种功能. 演示 web网页搭建好后,进入这个web页面,自动调用Servlet ...

  5. java stream中Collectors的用法

    文章目录 简介 Collectors.toList() Collectors.toSet() Collectors.toCollection() Collectors.toMap() Collecto ...

  6. Java 7中对String.substring的更改

    众所周知,在您生成相同源字符串的许多子字符串的情况下,Java会优化子字符串操作. 它通过使用(value, offset, count)存储信息的方式来做到这一点. 请参阅以下示例: 在上图中,您会 ...

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

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

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

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

  9. java语言中标识符大小写不敏感_下列叙述中,正确的是()。A.Java语言的标识符是区分大小写的B.源文件名与public类名可...

    下列叙述中,正确的是().A.Java语言的标识符是区分大小写的B.源文件名与public类名可 更多相关问题 [单选,A1型题] 有关血栓闭塞性脉管炎的说法,下列不恰当的是() [判断题] 用拉伸塑 ...

最新文章

  1. 《数据中台实战》:数据中台的分层建模体系
  2. wxWidgets:使用自定义对话框
  3. 24行代码AC_蓝桥杯2019省赛 试题 D: 数的分解
  4. python面试题之请谈谈.pyc文件和.py文件的不同之处
  5. linux acpidtd 进程,clover引导卡在该图上了,求资助
  6. SPSS做因子分析(非常细致的过程)
  7. (C++后台面经)网络编程1
  8. 裂变!裂变!这里有一份完整的微信流量裂变指南
  9. docker网络配置和4G网卡关系 小白笔记
  10. android 实现谷歌地图
  11. 华云数字实名认证图片_“云联盟华云数字”是云数贸传销组织衍生平台!不要被骗了...
  12. 202.微信公众号开发【图文消息】
  13. Qt绘 —— QPixmap 的使用
  14. java 类转换_java实体类转换有没有更优雅的方式?
  15. 如何在xcode7上打包越狱系统可用的ipa文件
  16. 刷机风暴—3Q大战第二季
  17. ZWAVE Alarm Report Command
  18. IntelliJ IDEA:xxx is not acceptable
  19. 小说app搭建—如何搭建小说分销系统?
  20. 全球10大智慧城市大数据应用案例

热门文章

  1. python字典的键可以是int吗_Python:大int键的快速字典
  2. php yaf框架和icon,php中Yaf框架是什么?
  3. jersey2.22.2异常java.lang.NoSuchMethodError: org.glassfish.jersey.CommonProperties.getValue
  4. plsql只提交存储过程里的事务_plsql 存储过程 事务
  5. 将Vba代码转换成Php代码,将这个Excel公式转换成VBA代码(函数)
  6. 计算机二级省份,【计算机二级】这些省份发布报名时间!调整前的最后一次考试!...
  7. mysql 数据库复制软件_mysql 快速复制数据库
  8. 纵坐标范围_探索频率范围与频响的奥秘
  9. java 动软_动软代码生成器下载_2017动软代码生成器下载及相关推荐 - noYes软件大全...
  10. DS4800 用串口登陆0.1改成85状态