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; } }