2020-11-10 07:01:30 +03:00

46 lines
1.7 KiB
C#

using System;
using TridentGoalSeek;
namespace EvoCalculator.Core.Calculation.Columns
{
public class CashflowNSIBColumn : BaseColumnWithGoalSeek
{
private readonly NSIBBruttoGrColumn _NSIBBruttoGrColumn;
private readonly NSIBExpensesColumn _NSIBExpensesColumn;
public CashflowNSIBColumn(int count, DateTempColumn dateTempColumn,
NSIBBruttoGrColumn nsibBruttoGrColumn, NSIBExpensesColumn nsibExpensesColumn) : base(count, dateTempColumn)
{
_NSIBBruttoGrColumn = nsibBruttoGrColumn;
_NSIBExpensesColumn = nsibExpensesColumn;
}
public override decimal Calculate(decimal inputVariable)
{
FillValues(inputVariable);
return Convert.ToDecimal(IRR);
}
protected override void FillValues(decimal x)
{
Values[1] = _NSIBBruttoGrColumn.Values[1] - x;
for (var i = 2; i < Values.Length; i++)
Values[i] = _NSIBBruttoGrColumn.Values[i] -
x * _NSIBExpensesColumn.Values[i] / _NSIBExpensesColumn.Values[1];
}
public override void ComputeValues(decimal requiredValue)
{
var goalSeek = new GoalSeek(this);
goalSeek.SeekResult(requiredValue,
new GoalSeekOptions(
startingStabPoint: Convert.ToDecimal(_NSIBBruttoGrColumn.Values[0] / 2)
, tineExplorePercentage: 10
// , maximumAttempts: 10000
// , initialTineSpacing: 1
// , focusPercentage: 100
// , trimFinalInputValue: true
));
}
}
}