2015-03-22 6 views
1

Я еще новичок в изучении C# и задавался вопросом, могу ли я получить некоторую помощь. Я пишу программу C# и формы Windows, чтобы пользователи могли рассчитать свои ежемесячные платежи и проценты за ипотеку. Уравнение i для платежей: Оплата = p * r/(1 - (1 + r)^(-n)) Где p - сумма кредита, r - это месячная процентная ставка, указанная как число от 0 (для 0 процентов) и 1 (на 100 процентов), n - продолжительность займа в месяцах Тогда формула для общей суммы процентов: общая сумма процентов = n * оплата -pИспользование экспонентов с десятичными знаками

Теперь у меня есть попытался ввести все эти числа в виде парных чисел, используя метод Math.Pow для платежей и получил неправильные вычисления. Я предполагаю, что скорость NEEDS будет десятичной, поэтому, когда я пытаюсь использовать ВСЕ как десятичные числа, VS не нравится метод «^» или метод math.pow. Итак, мой вопрос: как вы должны использовать десятичные знаки с показателями? Для тех, кто хочет увидеть мой текущий код, обратите внимание, что я просто пытаюсь завершить вычисления, прежде чем я начну добавлять дополнительные «else».

 decimal amnt = Convert.ToDecimal(txtAMNT.Text); 
     string Amount=Convert.ToString(txtAMNT.Text); 
     decimal rate = Convert.ToDecimal(txtRATE.Text); 
     string Rate = Convert.ToString(txtRATE.Text); 
     decimal time = Convert.ToDecimal(txtTIME.Text); 
     string Time=Convert.ToString(txtTIME.Text); 
     decimal monthpay; 
     decimal totalinterest; 
     decimal realrate = rate/100; 

     if ((Amount == "")||(Rate == "")||(Time=="")) 
     { 
      MessageBox.Show("Please fill all boxes with numbers"); 
     } 
     else 
     { 
      monthpay=amnt*realrate/(1-(1+realrate)^(-time)); 
       totalinterest=time*monthpay-amnt; 
      mtbMonPay.Text=monthpay.ToString("c"); 
      mtbTotalInterest.Text=totalinterest.ToString("c"); 
     } 
+0

Почему вы 'Convert.ToString'ing вещи, которые уже Струны (например,' txtAMNT.Text')? –

+0

'Decimal.TryParse' обычно считается лучше, чем' Convert.ToDecimal'. –

+0

idk Почему, именно так я писал некоторые из моих строк, я знаю, что это уже строка, но я думаю, что ее учили, я думаю. idk, я делаю это так большую часть времени. Независимо от того, что не должно влиять на математическую часть кода. – SprJD7903

ответ

3

Для этого расчета следует использовать double.

Причина, по которой вы получили неправильные результаты, заключалась в том, что вы забыли разделить годовую процентную ставку на 12, чтобы получить ежемесячную процентную ставку.

Десятичный знак не поддерживает возведение в степень. Кроме того, the caret operator (^) не предназначен для возведения в степень в C#; нет оператора экспоненциальности. Вам просто нужно позвонить Math.Pow.

Смотрите также https://stackoverflow.com/a/6426826/385844

+0

Ничего себе, если бы вы никогда не указали, что я, вероятно, выкинул бы мой ноутбук из окна в конце концов. Я пытался ВСЕ и полностью забыл разделить на 12. Я думал, что неправильно кодирую, ну, я был, я просто испортил свою математику – SprJD7903

0

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

Другой проблемой является ваша ставка. Реальная ставка вводится значение/100, что означает, что 1, который вы сказали, означает, что 100% фактически заканчивается как 1%.

Смежные вопросы