2012-03-21 5 views
1

Эй, у меня есть тестовая программа для чего-то, над чем я работаю.формат до 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; 
} 

Поблагодарили бы за любую помощь.

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

+0

Вы попробовали «% 4.2f»? –

+1

Что именно не работает? Я запустил ваш код и распечатывал строки, отформатированные до двух знаков после запятой, которые, по-видимому, соответствуют вашим требованиям. – FluffulousChimp

+0

ах, спасибо! он работал, я просто смотрел на неправильный вывод консоли. извините за неприятность – user1214037

ответ

4

Заканчивать 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,9 $ 101,28
$ 88,62
$ 75,96
$ 63,30
$ 50,6 $ 37,98
$ 25,32
$ 12,66
$ 0,00

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

+0

Да, я смотрел на неправильном выходе консоли, извините за проблему, и я посмотрю на NSDecimalNumber - Спасибо за отзыв – user1214037

+0

@ user1214037 без проблем, рад помочь –

+0

+1, однако они не отформатированы на два десятичных знака по запросу. (Пример того, как это сделать в дополнение к «обновлению» до NSDecimalNumber, ответит на исходный вопрос!) – lnafziger

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