отформатировать до 2 десятичных знаков перед добавлением в массив - PullRequest
1 голос
/ 22 марта 2012

Эй, у меня есть тестовая программа для чего-то, над чем я работаю.

Что это делает?- Он в основном минус ежемесячные платежи по кредиту от общей суммы к оплате, а затем вставляет его в массив, он работает, однако мне нужно отформатировать его до 2 десятичных знаков, и я понятия не имею, как это сделать, я пытался использоватьметод, который я нашел, это

[NSString stringWithFormat: @"%.2lf", tempPaymentHolder]

Но, похоже, он не работает, вот код.

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{

    @autoreleasepool {

        //array that would hold the payments
        NSMutableArray * arrayWithPayments = [[NSMutableArray alloc]init];

        //total amount to be paid
        NSMutableString * totalPaymentString = [[NSMutableString alloc]initWithString:@"151.92"];

        //monthly payment
        NSMutableString * monthlyPaymentsString = [[NSMutableString alloc]initWithString:@"12.66"];

        //temp storage for passing values into array
        NSMutableString * tempPaymentStringHolder = [[NSMutableString alloc]init];
        tempPaymentStringHolder = [NSString stringWithFormat:@"%@",totalPaymentString];

        //doubles so I can calculate
        int numberOfMonths = 12;
        double monthlyPayments = [monthlyPaymentsString doubleValue];
        double totalPayment = [totalPaymentString doubleValue];
        double tempPaymentHolder = totalPayment;


        for (int i = 0; i <= numberOfMonths; i++) 
        {
            [arrayWithPayments addObject:tempPaymentStringHolder];
            tempPaymentHolder = totalPayment - monthlyPayments;
            totalPayment = tempPaymentHolder;
            tempPaymentStringHolder = [NSString stringWithFormat: @"%.2lf", tempPaymentHolder];
        }

        for (id obj in arrayWithPayments)
        {
            NSLog(@"%@",obj);
        }


    }
    return 0;
}

Буду признателен за любую помощь.

Большое спасибо за потраченное время.

1 Ответ

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

Выезд NSDecimalNumber:

NSMutableArray *arrayOfPayments = [[NSMutableArray alloc]init];

//total amount to be paid
NSDecimalNumber * totalPayment = [NSDecimalNumber decimalNumberWithString:@"151.92"];

//monthly payment
NSDecimalNumber * monthlyPayments = [NSDecimalNumber decimalNumberWithString:@"12.66"];

//temp storage for passing values into array
NSDecimalNumber* tempPaymentHolder = [totalPayment copy];

//variables so I can calculate
int numberOfMonths = 12;


for (int i = 0; i <= numberOfMonths; i++) 
{
    [arrayOfPayments addObject:tempPaymentHolder];
    tempPaymentHolder = [totalPayment decimalNumberBySubtracting:monthlyPayments];
    totalPayment = [tempPaymentHolder copy];
}

NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];

for (NSDecimalNumber *obj in arrayOfPayments)
{
    NSLog(@"%@", [formatter stringFromNumber:obj]);
}

Вывод:

151,92 $
139,26
126.60
113,94
$ 101,28
$ 88,62
$ 75,96
$ 63,30
$ 50,64
$ 37,98
$ 25,32
$ 12,66
$ 0,00

Только обязательноне забудьте скопировать переменные там, где вы обычно их назначаете, поскольку вы имеете дело с объектами, а не с примитивами здесь!

...