NSNumberをNSStringに変換する方法


132

だから私はsとs を持つNSArray「myArray」を持っています。私は別のものでそれらを必要とするので、私はこのように行きます:NSNumberNSStringUIView

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

DetailViewController *details = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
details.subjectText = [[myArray objectAtIndex:indexPath.row] objectForKey:@"subject"];

subjectTextは機能します。しかし、どのようにしてNSNumbers を取り除くことができますか?(実際には文字列として必要です...)次NSStringNSNumberようなaを変換します NSString *blah = [NSNumber intValue]。しかし、上記のコードでそれを設定する方法がわかりません...


の使用から判断すると、配列には実際には辞書が含まれているようですobjectForKey。したがって、変換を試みる前に、そこから適切な値を抽出する必要があります。NSNumberを含むほとんどのCocoaオブジェクトタイプは、descriptionメソッドを呼び出す(または%@フォーマット文字列で使用する)ことによって文字列に変換できることに注意してください。
walkytalky

すごい..ご利用ありがとうございます!ドキュメンテーションを参照するか、それを理解するためのサンプルコードを提供できますか?=)
dav3

回答:


380

試してください:

NSString *myString = [NSNumber stringValue];

3
ただし、配列内にあるNSNumberを取得して、NSStringのようなStringValueメソッドを呼び出す必要があります* myString = [[myArray objectAtIndex:i] stringValue]; しかし、そのインデックスにNSNumberがあることを確認する必要があります
JonLOo

私はdescriptionWithLocale:[NSLocale currentLocale]を好みます。これは、intとfloatの両方で機能するためです。
just.do.it 2015

@JonLOoこれを特定の数に使用すると、10進数の値は正確な値を失います。例:NSNumber * num = [NSNumber numberWithDouble:48.3]; NSString * strNumber = num.stringValue; 結果は48.299999になります。これは、その量が重要であり、現実の世界で処理し、大きな数を掛ける必要がある場合に重要です。何か考えは?
Vish

それが動作するかどう@Vishこんにちは、私はでそれをフォーマットしてみてください、わからないイムので、このソリューションを試していない%f。このような [NSString stringWithFormat:@"%f", yourDouble];
JonLOo

「セレクタ 'stringValue'の既知のクラスメソッドはありません」<-stringValueはクラス関数ではないため、NSNumberで直接呼び出すことはできません。rhalgravezの答えはそれを正しく行います。
user1021430

13

あなたはそれを行うことができます:

NSNumber *myNumber = @15;
NSString *myNumberInString = [myNumber stringValue];

7
//An example of implementation :
// we set the score of one player to a value
[Game getCurrent].scorePlayer1 = [NSNumber numberWithInteger:1];
// We copy the value in a NSNumber
NSNumber *aNumber = [Game getCurrent].scorePlayer1;
// Conversion of the NSNumber aNumber to a String with stringValue
NSString *StringScorePlayer1 = [aNumber stringValue];

5

または試す NSString *string = [NSString stringWithFormat:@"%d", [NSNumber intValue], nil];


8
これは2つの変換を行います。1つはNSNumberをintValueに変換し、もう1つは結果のintValueをNSStringに強制変換します。これを使用することは少し小さいかもしれませんが、それを削除することは小さな計算サイクルを節約するための素晴らしい方法です...
Jann

これは、格納されている数値がintであることを前提としています。保存されている番号の種類がわからない場合はどうなりますか?
James Webster

3

面白いことに、NSNumberが文字列の一部になると、自動的に文字列に変換されます。文書化されているとは思いません。これらを試してください:

NSLog(@"My integer NSNumber:%@",[NSNumber numberWithInt:184]);
NSLog(@"My float NSNumber:%@",[NSNumber numberWithFloat:12.23f]);
NSLog(@"My bool(YES) NSNumber:%@",[NSNumber numberWithBool:YES]);
NSLog(@"My bool(NO) NSNumber:%@",[NSNumber numberWithBool:NO]);

NSString *myStringWithNumbers = [NSString stringWithFormat:@"Int:%@, Float:%@ Bool:%@",[NSNumber numberWithInt:132],[NSNumber numberWithFloat:-4.823f],[NSNumber numberWithBool:YES]];
NSLog(@"%@",myStringWithNumbers);

印刷されます:

My integer NSNumber:184
My float NSNumber:12.23
My bool(YES) NSNumber:1
My bool(NO) NSNumber:0
Int:132, Float:-4.823 Bool:1

MacとiOSの両方で動作します

これは機能しません:

NSString *myNSNumber2 = [NSNumber numberWithFloat:-34512.23f];

2
これは文書化%@されています。フォーマット指定子は-description、対応するレシーバーオブジェクトにメッセージを送信します。次のように書くと、最後の行を同じ精神で機能させることができますNSString *myNSNumber2 = [[NSNumber numberWithFloat:-34512.23f] description];。私の知る限り、NSNumber「S descriptionstringValue方法は同じことを行います。
Jean-Denis Muys

2

Swiftではこのようにすることができます

let number : NSNumber = 95
let str : String = number.stringValue

2

Swift 3.0の場合

let number:NSNumber = 25
let strValue = String(describing: number as NSNumber)
print("As String => \(strValue)")

文字列で数値を取得できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.