58 lines
1.6 KiB
C#
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;
|
|
}
|
|
} |