java - BigDecimal 月利率
问题描述
人们经常说(例如,Josh Bloch 在“Effective Java”中)我们不应该使用浮点类型,例如double
,来进行财务计算。那么,在给定年利率的情况下,我们如何计算月利率呢?
公式为:
monthly rate = (1 + annual rate)^(1/12) - 1
但是 BigDecimal 没有pow(BigDecimal)
方法,也没有nthRoot(int) method. So we can't call
rate.pow(1.0/12) nor
rate.nthroot(12)`,因为这些方法不存在。如果我们这样做:
monthlyRate = BigDecimal.valueOf(Math.pow(1 + rate.doubleValue(), 1.0/12) - 1)
那么它就违背了使用的目的,BigDecimal
以避免使用double
.
解决方案
推荐阅读
- ios - iPhone 进入睡眠状态时继续获取加速度计数据
- c# - 如何从 C# 中的 Async 方法读取返回值?
- html - 使 div css 宽度 1366px 高度 768px 适合父 div
- c - 以这种方式解决编译时的链表创建问题
- javascript - 为元素的子元素着色
- extjs - Extjs 绑定值没有被清除
- generics - DI,具有抽象、通用父级的具体类
- excel - 使用 Google AppScript 将 .csv 文件转换为 .xls
- h.264 - 编码器中使用的 fixed_frame_rate_flag 是什么?
- angular - Angular CanActivate 在浏览器刷新时失败,即使 observable 返回 true