Делая классный проект, удалось получить стабильный код. Однако это не рассчитывает, как ожидалось. Почему и что это исправит? - PullRequest
1 голос
/ 04 мая 2019

Как указано в названии, и немного глубже, он скоро должен быть, но я могу немного опоздать.Кроме того, я использую метод try / catch, потому что профессор хочет, чтобы исключения регистрировались.Он предложил ранее в классе, я спрашиваю здесь, нужна ли мне помощь, вот и я.Фактическая формула для расчета должна быть будущей стоимостью = инвестиции * (1 + процентная ставка) ^ проведенных лет.Некоторые вычисления работают, другие нет, и я не могу найти единственную причину.Спасибо за любую помощь, спасибо.

Я пробовал по крайней мере 5 различных методов math.pow ((long) math.pow, double x и double y).В конце концов я остановился на math.pow (инвестировать * курс, годы), где курсом было текстовое поле + 1.

try
            {
                //setting up some numbers to be parsed. 
                double InvestO = double.Parse(Investment_Textbox.Text);
                double InterO = double.Parse(Interest_Textbox.Text);
                double YearO = double.Parse(Years_Textbox.Text);
                double RateO = 1+InterO;

                //the actual calculation
                Future_Textbox.Text = Math.Pow((InvestO * RateO), YearO).ToString("C");
            } // end of the try coding

Я ожидал, что он будет точным или, по крайней мере, будет соответствовать тестовым данным, которые профессор дал (2000)сумма, 0,15 процента, 5 лет = 4022,71) но на самом деле это дало мне что-то вроде 43 триллионов или более.

Ответы [ 2 ]

2 голосов
/ 04 мая 2019

Полагаю, вы пытались рассчитать сумму начисленных процентов (основная сумма + проценты) A = P (1 + r) t?Если это так, ваш порядок действий не является правильным.Вы берете 2001.15 ^ 5 в своем примере, поскольку операция Math.Pow выполняется после того, как все внутренние вычисления завершены.Последняя строка должна читаться как ниже.

Future_Textbox.Text = (InvestO * Math.Pow((RateO), YearO)).ToString("C");
0 голосов
/ 04 мая 2019

Это интерес, который должен быть приведен в действие, а не вся сумма.Вы решили использовать формулу:

(2000*1.15)^5

Это расширяется до:

2300*2300*2300*2300*2300

Вы не сделали математику, но квадриллионы кажутся правильными

Если выНа 5 лет начисляются проценты в размере 15 шт. в год:

2300 * 1.15 * 1.15 * 1.15 * 1.15 * 1.15

Таким образом, начальная сумма увеличивается на 15 за событие в год в течение 5 лет

Это означает, что формула вашего профессора против вашей формулы:

initial * (1+rate)^5      //prof's formula
(initial * 1+rate)^5      //your formula, brackets around 1+rate omitted for clarity of "what went wrong"

Поэтому я бы предложил:

double rate = 0.15:
double initial = 2000;
int years = 5;
double total = initial * Math.Pow(1+rate, years);

Все, что вам нужно сделать сейчас, это получить значения из ваших текстовых полей в переменные:

double rate = double.Parse(rateTextbox.Text)/100; //put 15 in the text box, not 0.15

Iоставим вам все это в сборке (это академическое упражнение)


Некоторые другие советы по c # и кодированию в целом:

  • , когда выобучения, или даже когда вы профессионал и делаете что-то действительно сложное, сначала напишите свой алгоритм в комментариях, затем заполните код внизу, оставьте комментарии.Как ученик вы думаете на английском, а не на c #.Не нужно держать алгоритм в голове и переводить его одновременно, поможет.Думайте по-английски, пишите по-английски, переводите в c #
  • имена переменных, объявленные внутри блока метода (и частные переменные класса), начинаются с строчных букв.Открытые переменные / свойства начинаются с заглавных букв.Методы всегда начинаются с заглавных букв
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...