как рассчитать погашение кредита - PullRequest
2 голосов
/ 15 марта 2012

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

Я пришел к следующему, однако, похоже, что между моими расчетами и другим кредитом есть разницакалькуляторы в интернете.мои тестовые данные составляли сумму кредита в 1000 долларов США, 5% годовых в течение 1 года.это дает мне ежемесячный платеж в размере 85,61, а общий платеж - 1027,29

. Вот код, который рассчитывает это.

    double LoanAmount = la; //loan amount
    double InterestRate = ir; //interest rate
    double NumberOfYears = noy; //number of years

    double interestRateDecimal = InterestRate / (12 * 100);
    double months = NumberOfYears * 12;
    double rPower = pow(1+interestRateDecimal,months);

    monthlyPayments = LoanAmount * interestRateDecimal * rPower / (rPower - 1);
    totalPayments = monthlyPayments * months;
    yearlyPayments = monthlyPayments * 12;
    totalInterest = totalPayments - LoanAmount;

Правильно ли используется формула или есть ошибки?

Любая помощь будет оценена.

Большое спасибо

Ответы [ 2 ]

4 голосов
/ 15 марта 2012

Мне было немного скучно, поэтому я поместил формулу месячной ставки, полученную из internet , в код, который использует NSDecimalNumber .

Как вы увидите, использовать NSDecimalNumbers - большая пита.Но вы пишете финансовое программное обеспечение, и ваши клиенты ожидают, что результаты будут правильными.
И еще раз, я указываю вам на статью Маркуса Зарраса НЕ ЛЕНИТЕСЬ С NSDECIMALNUMBER (LIKE ME)

наслаждайтесь.

NSDecimalNumber *loan = [NSDecimalNumber decimalNumberWithString:@"25000"];
NSDecimalNumber *annualInterestRate = [NSDecimalNumber decimalNumberWithString:@"6"]; // 6%
annualInterestRate = [annualInterestRate decimalNumberByDividingBy:[NSDecimalNumber decimalNumberWithString:@"100"]]; // 0.06 i.e. 6%
NSInteger numberOfPayments = 36;

// (loan * (interest / 12)) / (1 - (1 + interest / 12) ^ -number)
//          ^^^^^^^^^^^^^ temp1
// ^^^^^^^^^^^^^^^^^^^^^^^^ temp2
//                                      ^^^^^^^^^^^^^ temp1
//                                 ^^^^^^^^^^^^^^^^^^^ temp4 
//                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ temp5
//                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ temp6
NSDecimalNumber *temp1 = [annualInterestRate decimalNumberByDividingBy:[NSDecimalNumber decimalNumberWithString:@"12"]];
NSDecimalNumber *temp2 = [temp1 decimalNumberByMultiplyingBy:loan];
NSDecimalNumber *temp4 = [[NSDecimalNumber one] decimalNumberByAdding:temp1];
NSDecimalNumber *temp5 = [[NSDecimalNumber one] decimalNumberByDividingBy:[temp4 decimalNumberByRaisingToPower:numberOfPayments]];
NSDecimalNumber *temp6 = [[NSDecimalNumber one] decimalNumberBySubtracting:temp5];

NSDecimalNumber *monthlyRate = [temp2 decimalNumberByDividingBy:temp6];
NSLog(@"Monthly rate: %@", monthlyRate);

надеюсь, что это правильно.Я обычно не имею дело с NSDecimalNumbers.

0 голосов
/ 15 марта 2012

Так вы должны рассчитать свой ежемесячный платеж.

NSDecimalNumber monthlyPayment = LoanAmount * interestRateDecimal / (1 - (pow(1/(1 + interestRateDecimal), months)));

Я предлагаю также использовать NSDecimalNumbers.

...