NPV函数

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; 
 

  

转载于:https://www.cnblogs.com/yuking/p/10168839.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值