JavaScript 中的 PMT

2023-12-07

我正在尝试编写与 EXCEL PMT 函数等效的代码。

在 JavaScript 中,公式如下所示:

function PMT (ir, np, pv, fv ) {
 /*
 ir - interest rate per month
 np - number of periods (months)
 pv - present value
 fv - future value (residual value)
 */
 pmt = ( ir * ( pv * Math.pow ( (ir+1), np ) + fv ) ) / ( ( ir + 1 ) * ( Math.pow ( (ir+1), np) -1 ) );
 return pmt;
}

这对于 Type =1 的 PMT 计算非常有用(即付款发生在周期开始时)

但是,我正在尝试针对 0 类场景进行编码(即付款发生在期末))。

有数学高手可以告诉我如何修改公式吗?


@dps123:当我最近不得不使用一些财务方程来转换 Excel 工作簿中的函数时,我遇到了EGM数学金融班,它试图模仿 Excel 函数。如果只是为了看看这些函数看起来如何/如何像 Excel 那样工作,那么它可能值得一看。

用法示例:

<?php
/**
 * Case use of financial class.
 * 
 * @version   $Id: financial_example.php,v 1.0.5 2004-06-23 09:03:56-05 egarcia Exp $
 * @author    Enrique Garcia M. <[email protected]>
 * @copyright (c) 2002-2004 EGM :: Ingenieria sin fronteras
 * @since     Saturday, November 30, 2002
 **/

/***************************************************************************
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the License, or
 *   (at your option) any later version.
 *
 ***************************************************************************/

include('financial_class.php');

echo '<pre>';
echo 'FV: ' . $f->FV(1.1, 1/360, 0, -100) . "\n";
echo 'PV: ' . $f->PV(1.1, 1/360, 0, -100.206306226) . "\n";
echo 'PMT: ' . $f->PMT(1.1, 1/360, -100) . "\n";
echo 'PMT: ' . $f->PMT(1.1, 1/360, 0, -100.206306226) . "\n";
echo 'NPER: ' . $f->NPER(1.1, 53428.7980679, -100) . "\n";
echo 'NPER: ' . $f->NPER(1.1, 0, -100, -100.206306226) . "\n";
echo 'FV: ' . $f->FV(0.1, 1/360, 0, -100) . "\n";
echo 'PV: ' . $f->PV(0.1, 1/360, 0, -100.026478555) . "\n";
echo 'PMT: ' . $f->PMT(0.1, 1/360, -100) . "\n";
echo 'PMT: ' . $f->PMT(0.1, 1/360, 0, -100.026478555) . "\n";
echo 'NPER: ' . $f->NPER(1.1, 37776.4114948, -100) . "\n";
echo 'NPER: ' . $f->NPER(1.1, 0, -100, -100.026478555) . "\n";
echo 'EFFECT: ' . $f->EFFECT(0.0525, 4) . "\n";
echo 'NOMINAL: ' . $f->NOMINAL(0.053543, 4) . "\n";
echo 'NPV: ' . $f->NPV(0.1, array(-10000,3000,4200,6800)) . "\n";
echo 'XNPV: ' . $f->XNPV(0.09, array(-10000,2750,4250,3250,2750), array(
    mktime(0,0,0,1,1,2008),
    mktime(0,0,0,3,1,2008),
    mktime(0,0,0,10,30,2008),
    mktime(0,0,0,2,15,2009),
    mktime(0,0,0,4,1,2009),
    )) . "\n";
echo 'XIRR: ' . $f->XIRR(array(-10000,2750,4250,3250,2750), array(
    mktime(0,0,0,1,1,2008),
    mktime(0,0,0,3,1,2008),
    mktime(0,0,0,10,30,2008),
    mktime(0,0,0,2,15,2009),
    mktime(0,0,0,4,1,2009),
    ), 0.1) . "\n";
echo 'IRR: ' . $f->IRR(array(-70000,12000,15000,18000,21000)) . "\n";
echo 'DISC: ' . $f->DISC(
    mktime(0,0,0,1,25,2007),
    mktime(0,0,0,6,15,2007),
    97.975,
    100,
    0) . "\n";
echo 'DISC: ' . $f->DISC(
    mktime(0,0,0,1,25,2007),
    mktime(0,0,0,6,15,2009),
    97.975,
    100,
    1) . "\n";
echo 'DISC: ' . $f->DISC(
    mktime(0,0,0,1,25,2007),
    mktime(0,0,0,6,15,2007),
    97.975,
    100,
    2) . "\n";
echo 'DISC: ' . $f->DISC(
    mktime(0,0,0,1,25,2007),
    mktime(0,0,0,6,15,2007),
    97.975,
    100,
    3) . "\n";
echo 'DISC: ' . $f->DISC(
    mktime(0,0,0,1,25,2007),
    mktime(0,0,0,6,15,2007),
    97.975,
    100,
    4) . "\n";
echo 'INTRATE: ' . $f->INTRATE(
    mktime(0,0,0,2,15,2008),
    mktime(0,0,0,5,15,2008),
    1000000,
    1014420,
    2) . "\n";
echo 'IPMT: ' . $f->IPMT(0.1/12, 3, 3, 8000) . "\n";
echo 'IPMT: ' . $f->IPMT(0.1, 3, 3, 8000) . "\n";
echo 'RECEIVED: ' . $f->RECEIVED(
    mktime(0,0,0,2,15,2008),
    mktime(0,0,0,5,15,2008),
    1000000,
    0.0575,
    2) . "\n";
echo 'DOLLARDE: ' . $f->DOLLARDE(1.02, 16) . "\n";
echo 'DOLLARDE: ' . $f->DOLLARDE(1.1, 32) . "\n";
echo 'DOLLARFR: ' . $f->DOLLARFR(1.125, 16) . "\n";
echo 'DOLLARFR: ' . $f->DOLLARFR(1.125, 32) . "\n";
echo 'FVSCHEDULE: ' . $f->FVSCHEDULE(1, array(0.09,0.11,0.1)) . "\n";
echo 'PPMT: ' . $f->PPMT(0.1/12, 1, 2*12, 2000) . "\n";
echo 'PPMT: ' . $f->PPMT(0.08, 10, 10, 200000) . "\n";
echo 'RATE: ' . $f->RATE(4*12,-200, 8000) . "\n";
echo 'RATE: ' . $f->RATE(4*12,-200, 8000)*12 . "\n";
echo 'SYD: ' . $f->SYD(30000, 7500, 10, 10) . "\n";
echo 'SLN: ' . $f->SLN(30000, 7500, 10) . "\n";
echo 'DDB: ' . $f->DDB(1000000, 100000, 10, 4) . "\n";
echo 'DELTA: ' . $f->DELTA(5, 4) . "\n";
echo 'DELTA: ' . $f->DELTA(5, 5) . "\n";
echo 'PRICEDISC: ' . $f->PRICEDISC(mktime(0,0,0,2,16,2008), mktime(0,0,0,3,1,2008), 0.0525, 100, 2) . "\n";
echo 'YIELDDISC: ' . $f->YIELDDISC(mktime(0,0,0,2,16,2008), mktime(0,0,0,3,1,2008), 99.795, 100, 2) . "\n";
echo 'COUPNUM: ' . $f->COUPNUM(mktime(0,0,0,1,25,2007), mktime(0,0,0,11,15,2008), 2, 1) . "\n";
echo 'COUPDAYBS: ' . $f->COUPDAYBS(mktime(0,0,0,1,25,2007), mktime(0,0,0,11,17,2008), 1, 1) . "\n";
echo 'VDB: ' . $f->VDB(2400,300,10*365,0,1) . "\n";
echo 'VDB: ' . $f->VDB(2400,300,10*12,0,1) . "\n";
echo 'VDB: ' . $f->VDB(2400,300,10,0,1) . "\n";
echo 'VDB: ' . $f->VDB(2400,300,10*12,6,18) . "\n";
echo 'VDB: ' . $f->VDB(2400,300,10*12,6,18,1.5) . "\n";
echo 'VDB: ' . $f->VDB(2400,300,10,0,0.875,1.5) . "\n";
echo 'MIRR: ' . $f->MIRR(array(-120000,39000,30000,21000,37000,46000), 0.1, 0.12) . "\n";
echo 'MIRR: ' . $f->MIRR(array(-120000,39000,30000,21000), 0.1, 0.12) . "\n";
echo 'MIRR: ' . $f->MIRR(array(-120000,39000,30000,21000,37000,46000), 0.1, 0.14) . "\n";
echo '</pre>';
?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 中的 PMT 的相关文章

随机推荐

  • .net core 是否支持代码契约?

    在 net 框架中 有代码契约允许我在代码中指定前置 后置条件 net core net 5 支持它们吗 命名空间System Diagnostics Contracts可用 但项目是弃 另类VS2019 https softwarerec
  • 嵌套集模型 PHP 库

    您好 我需要使用嵌套集模型来管理我网站上的产品类别 有谁知道一些好的预构建 PHP 库用于处理 MySQL 中的嵌套集 你可以尝试 Baobab 这是我最近发布的一个库 http www sideralis org baobab
  • 使用独立 NDK 工具链构建协议缓冲区

    我在使用 NDK build tools make standalone toolchain sh 脚本创建的独立 NDK 工具链构建 Android 协议缓冲区时遇到问题 我遇到的问题是这样的 libtool link g Wall Ww
  • 如何使用 ngFor ionic 隐藏未使用的项目?

    我试图从 ngFor 中隐藏未使用的项目 问题是 我确实成功隐藏了它 但它的位置仍然存在并且是空的 如下图所示 我的 ts 文件 coupon any couponz var data for let co of this shared c
  • 使用 lm() 和 Predict() 进行滚动回归和预测

    我需要申请lm 到我的数据框的扩大子集dat 同时对下一次观察进行预测 例如 我正在做 fit model predict dat 1 3 dat 4 dat 1 4 dat 5 dat 1 dat nrow dat 我知道我应该为特定子集
  • 我有一个 dd-mon-yyyy 格式的日期(字符串),我想将此日期与系统日期进行比较

    我在 字符串 中有一个 dd mon yyyy 格式的日期 我想将此日期与系统日期进行比较 例如 我的时间是 2010 年 10 月 12 日 我想将其与相同格式的系统日期进行比较 您可以使用SystemDateFormat例如 用于解析字
  • MySQL 显示状态 - 活动连接数还是总连接数?

    当我跑步时show status like Con 它显示了连接数 为 9972 并且还在不断增长 这是活跃连接数还是总连接数 根据the docs 表示历史上的总数 Connections 尝试连接 MySQL 服务器的次数 成功或失败
  • JavaScript:检测表单提交完成

    我在 iframe 中有一个表单并提交它 我如何知道提交何时完成 我正在使用 jQuery 提交表单 但不认为有回调 myForm submit 如何将事件附加到提交完成 提交表格会将您重定向到下一页 但你总是可以尝试ajax功能 http
  • ThreeJS - 如何将环境贴图应用到导入的 obj 模型?

    EDIT 我在这篇文章中找到了一个解决方案 如何将材质分配给 ColladaLoader 或 OBJLoader 我使用以下代码实现了允许我在导入的 obj 上使用 envMaterial 立方体贴图的效果 var loader new T
  • 如何使用selenium为firefox浏览器禁用通知

    我想在启动 Firefox 浏览器时完全禁用通知 对于不同的浏览器 驱动程序 需要设置不同的配置文件 选项 Firefox FirefoxProfile ffprofile new FirefoxProfile ffprofile setP
  • 与 NEON 内在函数的数据类型兼容性

    我正在使用来自 C 代码的 NEON 内在函数进行 ARM 优化 我理解并掌握了大部分打字问题 但我陷入了这一问题 指令vzip u8返回一个uint8x8x2 t值 实际上是两个数组uint8x8 t 我想将返回值分配给一个普通的uint
  • C# 泛型类中的协方差

    C 4 0 NET 4 5 Silverlight 5 看起来很奇怪 我找不到解决方案 所以需要一些帮助 我有基类 Base 和派生类 Child Base 我还有帮助程序类 它具有通用类型来执行特定工作 一个 EF 实体帮助程序 其中 T
  • 如何从文件路径中删除%20?

    file home ashu Music Collections randomPicks ipod 20on 20sep 2009 Coldplay Sparks mp3 如何转换像上面这样的字符串以获得可以传递到的正常文件路径open 功
  • 如何使用 mechanize 库执行 HEAD 请求?

    我知道如何使用 httplib 执行 HEAD 请求 但我必须对该站点使用 mechanize 本质上 我需要做的是从标头 文件名 中获取值 而不实际下载文件 有什么建议我可以如何实现这一点吗 Mechanize 本身仅发送 GET 和 P
  • 在 OfficeJS 中,您可以检索绑定对象的范围吗?

    针对 Word Online 但任何针对 Excel PPT 的指示也会有所帮助 本质上 是否可以将绑定对象内的文本视为范围 因此 能够选择全部并将插入符移动到开头 结尾 我设想代码具有以下效果 Office select myBindin
  • 如何从 python 中的另一个 .py 文件访问全局变量?

    我创建了两个文件 当我运行时a py 结果是 1 1 这是正确的 然而 运行b py 结果是没有 我如何获取请求的值b py a py requests def set value global requests requests 1 1
  • 创建一个大的虚拟文件

    我是这个社区的新手 也是 iOS 开发的新手 我希望有人能帮助我解决一些小问题 目前我正在为自己编写一个小应用程序 它应该创建一个非常大的虚拟文件 其中包含虚拟数据或单词或任何使它变大的东西 原因是 我想单击一个按钮 应用程序应该生成一个
  • 使用另一个 data.table 中的值更新 data.table 中的值

    我有一个包含大约 2500 万行的数据集 我正在获取这些行的子集并执行一个运行良好的函数 但是 我接下来需要做的是用新值更新原始数据集中的值 同时保留其余值 我确信这很简单 但我就是无法理解它 这是我正在处理的事情的简化版本 require
  • 无需 AJAX 将 JSON 文件从 jQuery 发送到 PHP

    所以 我是 javascript jquery 的新手 但我已经使用 PHP 足够长的时间了 我知道如何使用 PHP 从输入中获取数据 这非常简单 但是当尝试使用 jQuery 执行相同操作时 如何操作却超出了我的想象 现在我有这个脚本 还
  • JavaScript 中的 PMT

    我正在尝试编写与 EXCEL PMT 函数等效的代码 在 JavaScript 中 公式如下所示 function PMT ir np pv fv ir interest rate per month np number of period