58 lines
1.6 KiB
C#

namespace EvoCalculator.Core.FinanceFormulas;
public class Interpolation
{
private int[] values1 = { 7, 13, 24, 36, 48, 60 };
private int[] percentages1 = { 65, 56, 45, 35, 31, 0 };
private int[] percentages2 = { 45, 37, 32, 26, 11, 0 };
private int[] percentages3 = { 35, 30, 27, 24, 10, 0 };
private int[] values;
private int[] percentages;
public Interpolation(decimal PI)
{
switch (PI)
{
case >= 0.06m:
values = values1;
percentages = percentages1;
break;
case >= 0.03m and < 0.06m:
values = values1;
percentages = percentages2;
break;
default:
values = values1;
percentages = percentages3;
break;
}
}
public decimal Interpolate(decimal targetValue)
{
var lowerValue = values[0];
var lowerPercentage = percentages[0];
var higherValue = values[0];
var higherPercentage = percentages[0];
for (var i = 1; i < values.Length; i++)
{
if (values1[i] <= targetValue)
{
lowerValue = values[i];
lowerPercentage = percentages[i];
}
else
{
higherValue = values[i];
higherPercentage = percentages[i];
break;
}
}
var percentage = lowerPercentage + (higherPercentage - lowerPercentage) * (targetValue - lowerValue) /
(higherValue - lowerValue);
return percentage;
}
}