c#版NPV函数
- static void Main(string[] args)
- {
- double[] flow = new double[] { 565.43, 565.43, 565.43, 565.43, 565.43, 565.43, 565.43, 565.43, 565.43, 565.43, 565.43, 565.43, 635.47, 635.47, 635.47, 635.47, 635.47, 635.47, 635.47, 635.47, 635.47, 635.47, 635.47, 635.47, 707.61, 707.61, 707.61, 707.61, 707.61, 707.61, 707.61, 707.61, 707.61, 707.61, 707.61, 707.61, 781.92, 781.92, 781.92, 781.92, 781.92, 781.92, 781.92, 781.92, 781.92, 781.92, 781.92, 781.92, 858.45, 858.45, 858.45, 858.45, 858.45, 858.45, 858.45, 858.45, 858.45, 858.45, 858.45, 858.45 };
- //方法1
- var vb_npv = Microsoft.VisualBasic.Financial.NPV(0.02, ref flow);
- Console.WriteLine(vb_npv);
- //方法2
- Console.WriteLine(GetNPV(0.02,flow));
-
- Console.ReadKey();
- }
- public static double GetNPV(double dcRate, double[] values)
- {
- double counter = 0;
- return values.Sum(value => value / Math.Pow(1 + dcRate, ++counter));
- }
SqlServer版NPV函数:
- DECLARE @rate DECIMAL(30, 10) ,
- @strIDs VARCHAR(8000);
- SET @strIDs = '565.43, 565.43, 565.43, 565.43, 565.43, 565.43, 565.43, 565.43, 565.43, 565.43, 565.43, 565.43, 635.47, 635.47, 635.47, 635.47, 635.47, 635.47, 635.47,635.47, 635.47, 635.47, 635.47, 635.47, 707.61, 707.61, 707.61, 707.61, 707.61, 707.61, 707.61, 707.61, 707.61, 707.61, 707.61, 707.61, 781.92, 781.92,781.92, 781.92, 781.92, 781.92, 781.92, 781.92, 781.92, 781.92, 781.92, 781.92, 858.45, 858.45, 858.45, 858.45, 858.45, 858.45, 858.45, 858.45, 858.45,858.45, 858.45, 858.45';
- SET @rate = 0.0200000000;
- DECLARE @t_IDs TABLE
- (
- id INT IDENTITY(1, 1) ,
- value DECIMAL(30, 10)
- );
- DECLARE @strID VARCHAR(12) ,
- @sepPos INT;
- SET @strIDs = COALESCE(@strIDs + ',', '');
- SET @sepPos = CHARINDEX(',', @strIDs);
- WHILE @sepPos > 0
- BEGIN
- SET @strID = LEFT(@strIDs, @sepPos - 1);
-
- INSERT INTO @t_IDs
- ( value
- )
- SELECT ( CAST(@strID AS DECIMAL(30, 10)) )
- WHERE ISNUMERIC(@strID) = 1;
- SET @strIDs = RIGHT(@strIDs, DATALENGTH(@strIDs) - @sepPos);
- SET @sepPos = CHARINDEX(',', @strIDs);
- END;
- SELECT SUM(value / POWER(1 + @rate, id))
- FROM @t_IDs;
-