如何实现Excel的ACCRINT

Ism*_*imi 7 javascript excel excel-formula

作为Formula.js项目的一部分,我正在尝试重新实现Excel的ACCRINT函数(在JavaScript中,但语言无关紧要).我一直试图找到一个适当的描述它应该如何工作(特别是关于first_interest参数),但找不到任何东西.

有趣的是,Excel,Google Spreadsheets,Apple Numbers,Gnumeric和OpenOffice在实现它的方式上都存在分歧,尽管所有三个主要版本的Excel(Win,Mac,Web)似乎都互相认同.可以在此博客文章中找到更多上下文.

可以在这里找到数十个测试用例和我当前(有缺陷的)实现.

任何帮助将不胜感激!

更新:要明确,这个问题是相关的日期计算方式,这是我们用大卫惠勒的实施YEARFRAC,这本身是由超过32万次测试,涵盖了所有五个选项的基础验证.问题来自first_interest参数,似乎没有人真正理解.据我们所知,许多替代电子表格都忽略了这个参数,包括OpenOffice(它在源代码中被注释掉).而这个参数确实表现得很奇怪.如果您使用Excel并更改其值,您将看到它将更改ACCRINT函数给出的结果,但是看起来很混乱.尝试将first_interest日期改变一整个世纪,你会看到应计利息的变化,但不是很多.我真的无法理解这一点.如果有人能,我全都耳朵......

Ism*_*imi 0

来自 Quantitative Finance 的Phil H发现了这个.NET 库,它为所有财务功能提供了洁净室实现,除了两个之外,所有功能似乎都通过了测试(实际上有 201,349 个测试用例)。其中包括 ACCRINT。该代码根据知识共享署名获得许可。它是用 F# 编写的,但非常清晰。ACCRINT 的代码位于 bond.fs 文件中。我们将尝试将其移植到 JavaScript,看看是否得到与 Excel 返回的结果相同的结果。很快就会有更多相关内容...