public FinancialMathResult PerformGeometricLinking(decimal[] values)
        {
            var returnValue = values[0];
            var calculation = values[0].ToString();

            for (int i = 1; i < values.Length; ++i)
            {
                returnValue = (1 + returnValue) * (1 + values[i]) - 1;
                calculation = string.Format("((1 + {0}) * (1 + {1}) - 1)", calculation, values[i]);
            }

            var result = new FinancialMathResult(
                returnValue,
                calculation + " = " + returnValue);

            return(result);
        }
        public FinancialMathResult AnnualizeByMonth(
            decimal value,
            int monthCount)
        {
            const int monthsPerYear = 12;

            var valueAsDouble = Convert.ToDouble(value);

            var baseVal     = 1 + valueAsDouble;
            var baseValCalc = string.Format("(1 + {0})", value);

            var exponentVal     = monthsPerYear * 1.0 / monthCount;
            var exponentValCalc = string.Format("({0} * 1 / {1})", monthsPerYear, monthCount);

            var pow         = Math.Pow(baseVal, exponentVal) - 1;
            var calculation = string.Format("({0} ^ {1}) - 1", baseValCalc, exponentValCalc);

            var result = new FinancialMathResult();

            result.Value       = Convert.ToDecimal(pow);
            result.Calculation = calculation + " = " + Convert.ToDecimal(pow);

            return(result);
        }