我想在Java中实现PMT函数(来自Excel)。的PMT函数的公式为:Java中的Excel PMT函数
(D7*D9/12)/(1-(1+D9/12)^(-(D11/12)*12))
其中:
- D7 =金融金额
- D9 =率
- D11 =期限
例如
D7 = $1,00,000,
D9 = 10%,
D11 = 36
这里的PMT功能,即每月支付的输出将是$3,226.72
请任何人都帮我来计算这个函数在Java中的值。
我想在Java中实现PMT函数(来自Excel)。的PMT函数的公式为:Java中的Excel PMT函数
(D7*D9/12)/(1-(1+D9/12)^(-(D11/12)*12))
其中:
例如
D7 = $1,00,000,
D9 = 10%,
D11 = 36
这里的PMT功能,即每月支付的输出将是$3,226.72
请任何人都帮我来计算这个函数在Java中的值。
您可以使用Apache POI:
http://poi.apache.org/apidocs/org/apache/poi/ss/formula/functions/FinanceLib.html
它节省了我的一天:d
用例:
FinanceLib.pmt(0.00740260861, 180, -984698, 0, false)
参数:rate
,months
,present value
,future value
,at the beginning of the period
(或结尾)
你是如何在Android中使用它的?我的意思是你是如何在Android中用gradle导入的? –
想通了。 '从这里下载jar''http://www.java2s.com/Code/Jar/p/ Downloadpoi39jar.htm'并将其包含在'libs'中。 –
//D7:Finance Amount
//D9 = Rate(the rate here is annual rate)
//D11 = Term
fv=D7 * Math.pow((1 + D9/12), D11);
PMT=(fv * D9/12)/(pow((1 + D9/12), D11) - 1);
D11,期限是几个月? –
@ShubhamA。是的,3年,术语是3 * 12 = 36 – Ding
这是Excel PMT等效于JAVA:
public BigDecimal calcEMI(BigDecimal P, BigDecimal N, BigDecimal ROI) {
if(BigDecimalUtil.anyOneZeroOrNull(P,N,ROI)){
SCBSUtils.throwSmartCBSException("Invalid data for calculating EMI %s, %s %s", P,N,ROI);
}
MathContext mc = MathContext.DECIMAL128;
//Excel equivalent formula == P*R*POWER(1+R,N)/(POWER(1+R,N)-1)
BigDecimal R = ROI.divide(new BigDecimal(1200),mc);
BigDecimal nemi1 = P.multiply(R,mc);
BigDecimal npower1 = (BigDecimal.ONE.add(R)).pow(N.intValue(),mc);
BigDecimal dpower1 = (BigDecimal.ONE.add(R)).pow(N.intValue(),mc);
BigDecimal denominator = dpower1.subtract(BigDecimal.ONE);
BigDecimal numerator = nemi1.multiply(npower1);
BigDecimal emi = numerator.divide(denominator,0,RoundingMode.UP);
return emi;
}
EXCEL PMT等同于JAVA –
像这样:
public static void main(String[] args) {
MathContext MATH_CONTEXT = new MathContext(18, RoundingMode.HALF_UP);
BigDecimal pmt = pmt(new BigDecimal("-100000", MATH_CONTEXT),
new BigDecimal("10", MATH_CONTEXT),
new BigInteger("36"));
}
public static BigDecimal pmt(BigDecimal D7, BigDecimal D9, BigInteger D11) {
BigDecimal rate = D9
.divide(new BigDecimal("100"), MATH_CONTEXT)
.divide(new BigDecimal("12"), MATH_CONTEXT);
return rate.negate(MATH_CONTEXT)
.multiply(D7.multiply(pow(BigDecimal.ONE.add(rate), D11), MATH_CONTEXT))
.divide(pow(BigDecimal.ONE.add(rate), D11).subtract(BigDecimal.ONE), MATH_CONTEXT);
}
private static BigDecimal pow(BigDecimal x, BigInteger n) {
return x.pow(n.intValue(), MATH_CONTEXT);
}
Excel PMT函数使用比例方法计算年金。现在很多人都使用Conformal方法,而年金比较低。
在JAVA PMT实现:发布至今真正其他的答案
private static double calculateAnnuity(double creditAmmount, double interestRate, double numberOfYears, int calculationPeriod) {
double annuitiesPerYear = 12.0/(numberOfYears * 12.0) * (numberOfYears * 12.0)/calculationPeriod;
double period = 1/annuitiesPerYear;
double interest = Math.pow(1 + (interestRate/100), period) - 1;
double decursiveFactor = 1 + interest;
double annuityCalc = (Math.pow(decursiveFactor, numberOfYears * 12) * (decursiveFactor - 1))/(Math.pow(decursiveFactor, numberOfYears * 12) - 1);
return Math.round((creditAmmount * annuityCalc) * 100.0)/100.0;
}
// Test - credit ammount: 10000, interest rate 8.0 %, tenor: 60 months, .
public static void main(String [] args){
System.out.println(calculateAnnuity(10000, 8.0, 60/12.0, 1));
}
似乎都不匹配Excel的结果。
这个工作对我来说:
if (D9 < 1E-6) {
return (D7/D11);
}
return (D7*D9)/(1.0 - Math.pow(1 + D9, -D11));
而你的问题是什么? '^'运算符?在Java中,剩下的基本数学就是没有区别。 – BalusC