Member 13998781 Ответов: 1

Как рассчитать внутреннюю норму прибыли (IRR)?


Я изменил свой первоначальный вопрос....

У меня есть столбец в DataGridView, который включает в себя значения денежных потоков до налогообложения.
Не мог бы кто-нибудь помочь мне рассчитать IRR (внутреннюю норму прибыли)?

Вот что я сделал до сих пор, но получаю ошибку при попытке вычислить функцию IRR:

Ошибка: значение типа 'Double' не может быть преобразовано в '1-мерный массив Double. эта ошибка относится к "val" в функции IRR.

Большое спасибо за вашу помощь! Пожалуйста, подумайте об этом, я новичок и просто начинаю кодировать VB, спасибо !!

Что я уже пробовал:

Dim prec As String  "###,##0.00"
Dim guess As Double=0.1

For i = 0 to DataGridView1.Rows.Count -1
    For j = 0 to DataGridView1.Rows.Count -1

        Dim value(j) As Double
        Dim val As Double
        value(j) = DataGridView1.Rows(i).Cells(0).Value

        value(j) = val
    
        Dim cal As Double = IRR(val,guess) * 100

        MsBox("IRR = " & Format(cal, CStr(prec)) & " % ")
        Text1.Text=cal
    Next
Next

1 Ответов

Рейтинг:
6

Dave Kreskowiak

Ты идешь по неверному пути. DGV существует для отображения данных. Самый простой способ сделать это-привязать сетку к источнику данных.

Этот источник данных-то, что вы упускаете. Это структура, которую вы создаете, которая хранит и обрабатывает ваши данные, используя соответствующие типы данных для ваших вычислений. Это то, на чем должны быть сделаны все ваши расчеты.

DGV может быть привязан к вашей структуре данных, чтобы показать данные в ней. Таким образом, вам не придется беспокоиться о Столбцах и преобразовании того, что находится в ячейке DGV, во что-то полезное.


Member 13998781

Спасибо Дейву за комментарии. Я попробовал другой подход и изменил свой вопрос, пожалуйста, посмотрите, есть ли способ помочь мне здесь, чтобы получить езду этой "ошибки" ! большое спасибо, что уделили мне время.

Dave Kreskowiak

Похоже, что функция IRR ожидает, что первый параметр будет массивом двойников, и вы передаете "val", который является двойником, а не массивом. Может быть, вам нужно вместо этого передать "ценность".

Я не знаю, как вы где-то определили IRR или используете ли вы библиотеку, так что это предположение о том, что не так.

Member 13998781

Спасибо, но я тоже получаю ту же ошибку с "ценностью"!

однако эта функция IRR будет работать, если вручную определить значение для каждой строки, например: Value(0) = -50000, Value (1)= 25000, Value (2) = 42000 и т. д... но не могу прочитать эти значения из строк в datagrid! tnx

Dave Kreskowiak

Вам вообще не нужна переменная val. Удалить его. Это только одна проблема с этим кодом. Я наконец-то нашел, откуда ты получаешь ИРР.

Глядя на это, код можно упростить до:

        Dim rowCount As Integer = DataGridView1.Rows.Count - 1
        Dim guess As Double = 0.1

        Dim values(rowCount) As Double
        For i As Integer = 0 To rowCount
            values(i) = DataGridView1.Rows(i).Cells(0).Value
        Next

        Dim cal As Double = IRR(values, guess) * 100
        Debug.WriteLine("IRR = " & cal)

Member 13998781

Вот это здорово! большое спасибо Дэйву за ваше время...! очень ценю..!:)

Member 13998781

Спасибо, но я тоже получаю ту же ошибку с "ценностью"!

Member 13998781

однако эта функция IRR будет работать, если вручную определить значение для каждой строки, например: Value(0) = -50000, Value (1)= 25000, Value (2) = 42000 и т. д... но не могу прочитать эти значения из строк в datagrid! tnx