Ошибка при Float при расчете IRR «Произошла недопустимая операция с плавающей запятой». - PullRequest
0 голосов
/ 10 января 2020

Мне нужно рассчитать IRR, и для этого нашел формулу.

Он работает для большинства наших значений, однако выдает ошибку «Произошла недопустимая операция с плавающей запятой». в следующем примере:


        DECLARE @CashFlow TABLE (Amount DECIMAL(19,9), InvoiceDate DATETIME);

        INSERT INTO @CashFlow (Amount, InvoiceDate)
        VALUES
        (-500000, '2019-12-01'),
        (1000, '2020-01-01'),
        (0, '2020-02-01');


        DECLARE @X DECIMAL(38,9) = 0.0,
            @X0 DECIMAL(19,9) = 0.1,
            @f DECIMAL(19,9) = 0.0,
            @fbar DECIMAL(19,9) = 0.0,
            @i TINYINT = 0,
            @found TINYINT = 0,
            @Rate DECIMAL(19,9) = 0.1

        IF @Rate IS NULL
            SET @Rate = 0.1

        SET @X0 = @Rate

        WHILE @i < 100
            BEGIN
                SELECT  @f = 0.0,
                    @fbar = 0.0

                SELECT      @f = (@f + Amount * POWER(1 + @X0, (-theDelta / 365.0E))),
                @fbar = (@fbar - theDelta / 365.0E * Amount * POWER(1 + @X0, (-theDelta / 365.0E - 1)))
                FROM    (
                        SELECT  Amount,
                            DATEDIFF(DAY,MIN(InvoiceDate) OVER(),InvoiceDate) AS theDelta
                        FROM    @CashFlow

                    ) AS d


                    SET @X = @X0 - @f / @fbar


                If ABS(@X - @X0) < 0.00000001
                BEGIN
                   SET @found = 1
                   BREAK;
                END

                SET @X0 = @X
                SET @i += 1
           END

        If @found = 1
            SELECT @X AS IRR

Кто-нибудь, кто может помочь?

Я использовал те же значения для расчета IRR в Excel, и это возвращает значение -99,77%.

...