2012-01-09 10 views
0

NSNumberをfloat値としてNSArrayに挿入しようとしていますが、別のNSNumberからfloatValueを含んでいます。私は、配列の細かいを作成することができますが、私はオブジェクトにアクセスするとき、それは整数にのみ表示されますか?私は[するNSNumber numberWithFloatは:n]がいることを期待.. float値で、通常のNSNumberを生成する別のNSNumberビヘイビアからNSNumberを作成していますか?

int myInteger = 3; 
NSNumber *myNum = [NSNumber numberWithInt:myInteger]; 
NSArray *arr = [NSArray arrayWithObjects:[NSNumber numberWithFloat:[myNum floatValue]], nil]; 
NSLog(@"%@", [arr objectAtIndex:0]); 

出力:

2012-01-09 16:39:32.664 ObjectiveCSandbox[2961:707] 3 

はまた、私は細かいポインタ%を使用することができています、 NSLogで%fポインタを試してみると、アプリケーションが完全にクラッシュします。ここで何が起こっているのですか?この質問は何よりも学問的です。

+0

単なるオブジェクトの配列を作成する場合、 'arrayWithObject' ** s **': 'の代わりに' arrayWithObject: 'を使うことができます。 –

+0

yuが正しい値(整数)を持つNSNumberを持っていれば、浮動小数点表現を使って2番目のインスタンスを作成する必要はなく、非常に大きな値の場合は精度が低下する可能性があることに注意してください私の浮動小数点表現情報が正しく)。 – bbum

答えて

3

NSNumberのデフォルトの印刷動作は先頭の0をトリミングします。したがって、基になる値がfloatであっても、実際のゼロ以外の浮動小数点数がない場合は、整数のように出力されます。

2番目の質問では、オブジェクトをログに記録しているので、%i%fの両方を使用すると、ログステートメントに誤りがあります。必要ならば%pを使ってオブジェクトのポインタ値を記録することができますが、現時点ではそれはあなたにとって有益だとは思いません。 %fを使用してprintfのデフォルト浮動小数点数の動作を取得する場合は、NSLog(@"%f", [[arr objectAtIndex:0] floatValue])のように、オブジェクトではなく浮動小数点数を実際に渡す必要があります。

あなたが本当に興味を持っているすべてはNSNumberが内部フロートを記憶しているかどうかである場合、あなたはあなたの根本的な価値のために-string @encodeを与える-objcType方法、結果をプリントアウトすることができますが、私は」あなたが望むフォーマットの値を返すことができる限り(例えば、-floatValueを呼び出して)、NSNumberがあなたの値を格納するために使用する特定の基になるフォーマットを気にする理由がわからない。

+0

ありがとうKevin、%fとfloatValueを使用して私が逃していたものでした。 – mccrackend

1

は、最後の行のためにこれを試してみてください:

NSLog(@"%f", [[arr objectAtIndex:0] floatValue]); 
+0

これも私の問題を解決したものです:)ありがとう! – mccrackend