2024-03-20 08:34:17 +03:00

58 lines
1.6 KiB
C#

namespace EvoCalculator.Core.FinanceFormulas;
public class Interpolation
{
private int[] values1 = { 7, 12, 18, 24, 36, 60 };
private int[] percentages1 = { 60, 50, 40, 29, 25, 25 };
private int[] percentages2 = { 45, 35, 30, 26, 25, 25 };
private int[] percentages3 = { 35, 30, 27, 25, 25, 25 };
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;
}
}