Расчет сложных процентов - PullRequest
1 голос
/ 14 июля 2020

У меня есть этот код C#, который вычисляет сложные проценты плюс основную сумму каждый год.

static void CompoundInterest(double principal, double interestRate, double years, double annualCompound)
    {
        var total = 0.0;
        for (int t = 1; t < years + 1; t++)
        {
            total = principal * Math.Pow((1 + interestRate / annualCompound),
                                     (annualCompound * t));
            Console.Write("Your Total for Year {0} "
                        + "is {1}. \n", t, total);
        }
    }

Когда я тестировал его с

 CompoundInterest(1000, 0.05, 3, 12);

, и результат был

Your Total for Year 1 is 1051.161897881733.
Your Total for Year 2 is 1104.941335558327.
Your Total for Year 3 is 1161.4722313334678.

Как правильно округлить? Другой вопрос: Math.Pow использует double, но в финансовых расчетах нам нужно decimal. Как это исправить? Преобразовать в десятичное после Math.Pow?

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Я провел несколько тестов, округлив сначала и преобразовав в десятичное, а затем преобразовав в десятичное, а затем округлив послесловие. Оба дали одинаковые результаты.

Но с точки зрения logi c, я бы сначала преобразовал, чем округление после слов. Таким образом, у меня будет лучший контроль над проверкой того, что преобразовано, а что округлено.

Для преобразования есть разные ответы, но я обнаружил, что этот метод Convert.ToDecimal поддерживается всеми. net каркасы и стержни.

пр. decimal value = Convert.ToDecimal(double_value);

А затем вы decimal.Round , на который кто-то спросил и получил здесь ответ Почему. NET по умолчанию использует банковское округление?

На всякий случай ссылка на Числа с плавающей запятой c типы .

0 голосов
/ 14 июля 2020

Вы можете напрямую преобразовать двойное число в десятичное, если хотите.

decimal decimalTotal = (decimal)total;

Что касается округления, есть встроенная функция Math.Round, которая принимает различные числовые форматы. В нем есть перегрузка, чтобы указать, сколько десятичных знаков вы хотите.

decimal roundedDecimal = Math.Round(decimalTotal, 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...