2012-03-21 21 views
1

ちょっと、私は何かのためのテストプログラムを持っています。フォーマットを小数点以下2桁まで追加する

どうしますか? - それは基本的に支払う総額から毎月のローン支払いを差し引いて、それを配列に挿入しますが、それは小数点以下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

正確には機能しないのは何ですか?私はあなたのコードを実行し、あなたの仕様に合うように見える2桁の小数点以下をフォーマットした文字列を出力します。 – 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.94
$ 101.28
$ 88.62
$ 75.96
$ 63.30
$ 50.64
$ 37.98
$ 25.32
$ 12.66
$ 0.00

ただ、ここにあなたがオブジェクトを扱っているとして、あなたは、通常、それらを割り当てます変数ではなく、プリミティブをコピーすることを忘れないようにしてください!

+0

ええ、私が探していた間違ったコンソール出力で、問題を申し訳なく思っています。私はNSDecimalNumberを見ていきます - チップのおかげで – user1214037

+0

@ user1214037問題はありません。 –

+0

+1、しかし、彼らは要求通りに2小数にフォーマットされていません。 (NSDecimalNumberへの "アップグレード"に加えてこれを行う方法の例は元の質問に答えるでしょう!) – lnafziger

関連する問題