簡體   English   中英

為什么我從此XIRR函數獲得NaN?

[英]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運行這些完全相同的值:

在Excel中測試XIRR

誰能發現這個問題? 函數是否可以發送錯誤的值?

@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM