580

いくつかのプリミティブデータ型( 、、、、など)をNSString含むを変換するにはどうすればよいですか?問題は、実行時に文字列に含まれる数値タイプがわからないことです。intfloatcharunsigned int

私はそれを行う方法を知っていますが、これがどのタイプでも、符号なしおよび浮動小数点値でも機能するかどうかはわかりません。

long long scannedNumber;
NSScanner *scanner = [NSScanner scannerWithString:aString];
[scanner scanLongLong:&scannedNumber]; 
NSNumber *number = [NSNumber numberWithLongLong: scannedNumber];

助けてくれてありがとう。

4

18 に答える 18

1262

次を使用しNSNumberFormatterます。

NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
f.numberStyle = NSNumberFormatterDecimalStyle;
NSNumber *myNumber = [f numberFromString:@"42"];

文字列が有効な数値でない場合は、 にmyNumberなりますnilNSNumberそれが有効な数であれば、それが実際にどのような数であるかを把握するためのすべての利点があります。

于 2009-09-19T16:21:47.640 に答える
182

-[NSString integerValue]、などを使用できます-[NSString floatValue]。ただし、これを行う正しい (ロケールに依存するなどの) 方法は、これを使用-[NSNumberFormatter numberFromString:]して、適切なロケールから変換された NSNumber を取得し、NSNumberFormatter(フローティングを許可するかどうかを含む)の設定を指定することです。ポイント値)。

于 2009-09-19T16:18:51.477 に答える
145

Objective-C

(注: この方法は、異なるロケールでは適切に機能しませんが、 よりわずかに高速ですNSNumberFormatter)

NSNumber *num1 = @([@"42" intValue]);
NSNumber *num2 = @([@"42.42" floatValue]);

迅速

シンプルだが汚い方法

// Swift 1.2
if let intValue = "42".toInt() {
    let number1 = NSNumber(integer:intValue)
}

// Swift 2.0
let number2 = Int("42')

// Swift 3.0
NSDecimalNumber(string: "42.42") 

// Using NSNumber
let number3 = NSNumber(float:("42.42" as NSString).floatValue)

拡張方法 これは、ロケールと小数でうまく機能するため、実際には優れています。

extension String {
    
    var numberValue:NSNumber? {
        let formatter = NumberFormatter()
        formatter.numberStyle = .decimal
        return formatter.number(from: self)
    }
}

これで、次のことが簡単にできます。

let someFloat = "42.42".numberValue
let someInt = "42".numberValue
于 2013-12-09T13:25:35.653 に答える
86

@"123"@"456 ft"、などの整数で始まる文字列には@"7.89"、 を使用します-[NSString integerValue]

だから、@([@"12.8 lbs" integerValue])やっているようなもの[NSNumber numberWithInteger:12]です。

于 2010-09-29T13:04:03.400 に答える
50

これを行うこともできます:

NSNumber *number = @([dictionary[@"id"] intValue]]);

楽しむ!

于 2013-06-05T13:13:59.207 に答える
26

整数を受け取ることがわかっている場合は、次を使用できます。

NSString* val = @"12";
[NSNumber numberWithInt:[val intValue]];
于 2012-04-10T00:35:29.187 に答える
11

これは、ローカライズされた数値 NSString (xCode 3.2.4、osX 10.6) を読み取る NSNumberFormatter の実際のサンプルです。注意: 末尾の空白は処理できますが ("8,765.4 " は機能します)、先頭の空白を処理できず、テキスト文字も処理できません。(不正な入力文字列: " 8" と "8q" と "8 q"。)

NSString *tempStr = @"8,765.4";  
     // localization allows other thousands separators, also.
NSNumberFormatter * myNumFormatter = [[NSNumberFormatter alloc] init];
[myNumFormatter setLocale:[NSLocale currentLocale]]; // happen by default?
[myNumFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
     // next line is very important!
[myNumFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; // crucial

NSNumber *tempNum = [myNumFormatter numberFromString:tempStr];
NSLog(@"string '%@' gives NSNumber '%@' with intValue '%i'", 
    tempStr, tempNum, [tempNum intValue]);
[myNumFormatter release];  // good citizen
于 2010-10-25T20:33:39.187 に答える
5

皆さんありがとう!私はフィードバックを組み合わせて、最終的にテキスト入力(文字列)から整数に変換することができます。さらに、入力が整数かどうかを教えてくれます:)

NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber * myNumber = [f numberFromString:thresholdInput.text];

int minThreshold = [myNumber intValue]; 

NSLog(@"Setting for minThreshold %i", minThreshold);

if ((int)minThreshold < 1 )
{
    NSLog(@"Not a number");
}
else
{
    NSLog(@"Setting for integer minThreshold %i", minThreshold);
}
[f release];
于 2011-03-05T13:17:24.327 に答える
5

文字列を double に変換したかったのです。この上記の答えは、私にとってはうまくいきませんでした。しかし、これはそうでした: Objective-C で文字列変換を行うには?

私がほとんどしたことは次のとおりです。

double myDouble = [myString doubleValue];
于 2013-09-14T14:39:48.423 に答える
2

[string intValue]または[string floatValue]または[string doubleValue]などを使用できます

NSNumberFormatterクラスを使用することもできます:

于 2014-01-29T10:33:21.243 に答える
2

Cの標準はatoiどうですか?

int num = atoi([scannedNumber cStringUsingEncoding:NSUTF8StringEncoding]);

注意点はあると思いますか?

于 2012-07-27T12:55:50.843 に答える
0

私はこれが非常に遅いことを知っていますが、以下のコードは私のために働いています。

このコードを試してください

NSNumber *number = @([dictionary[@"keyValue"] intValue]]);

これはあなたを助けるかもしれません。ありがとう

于 2017-05-27T07:27:57.743 に答える
0

Swift 3で働いた

NSDecimalNumber(string: "Your string") 
于 2016-09-23T08:18:39.853 に答える
-1
extension String {

    var numberValue:NSNumber? {
        let formatter = NumberFormatter()
        formatter.numberStyle = .decimal
        return formatter.number(from: self)
    }
}

let someFloat = "12.34".numberValue
于 2017-10-12T18:55:02.603 に答える