[英]Why am I getting NaN from this XIRR function?
這使我無法自拔。
更新:組裝在產生NaN的jsfiddle中: https ://jsfiddle.net/eqcww2y7/6/
我正在使用此XIRR函數: https ://gist.github.com/ghalimi/4669712
在該函數中,我將發送一對簡單的數組-4個日期,4個現金流量值。
var dates = [
"2016-01-01",
"2016-02-01",
"2016-03-01",
"2016-04-01",
];
var values = [
-1000000,
0,
0,
750000
];
console.log('dates', dates);
console.log('values', values);
console.log(XIRR(values, dates, 0.1));
該函數依賴momentjs,不會引起任何問題-函數內部的console.log()
顯示正確地解析了日期。
上面的代碼段返回NaN,而應返回-0.68。 如果我通過Excel運行這些完全相同的值:
誰能發現這個問題? 函數是否可以發送錯誤的值?
@Andreas着迷於此。 XIRR函數於2012年編寫,從ECMAScript 2015開始,Math.pow()的行為有所不同。 我不確定這是否適用於所有瀏覽器/引擎/實現,但是對於我的特定用例,由於基數和指數輸入為負,因此XIRR()返回NaN。
更新:為了澄清-在我的用例中,基數對/指數對開始是這樣的:
x = 1.1, y = 0.0849
x = 1.1, y = 1.2493
但是一個迭代之后,我有了這個:
x = -0.512, y = 0.084
x = -0.512, y = 1.164
由於x是負的非整數,所以不管指數是多少,我總會得到NaN。 至少那是我對Math.pow()局限性的理解。
只是為了增加已經給出的解釋,該要點中使用的XIRR函數提到:
一些算法已從Apache OpenOffice移植
如果您在OpenOffice Calc中設置相同的值/日期,則會得到
在openoffice論壇中搜索與XIRR相關的錯誤,您可以訪問https://forum.openoffice.org/en/forum/viewtopic.php?t=14006 ,他們提到可能的問題是我們在此處找到的。
他們確實提供了解決方案( 事實證明這是針對特定約束的解決方案 ),
我建議您使用SUM(C4:C15)/ C3( 存入值的總和減去接收值 )作為猜測
在您的情況下,它將是SUM(B2:B4)/B1
,並且確實返回-0.684592
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.