How to convert an NSString into an NSNumber How to convert an NSString into an NSNumber objective-c objective-c

How to convert an NSString into an NSNumber


Use an NSNumberFormatter:

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

If the string is not a valid number, then myNumber will be nil. If it is a valid number, then you now have all of the NSNumber goodness to figure out what kind of number it actually is.


You can use -[NSString integerValue], -[NSString floatValue], etc. However, the correct (locale-sensitive, etc.) way to do this is to use -[NSNumberFormatter numberFromString:] which will give you an NSNumber converted from the appropriate locale and given the settings of the NSNumberFormatter (including whether it will allow floating point values).


Objective-C

(Note: this method doesn't play nice with difference locales, but is slightly faster than a NSNumberFormatter)

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

Swift

Simple but dirty way

// Swift 1.2if let intValue = "42".toInt() {    let number1 = NSNumber(integer:intValue)}// Swift 2.0let number2 = Int("42')// Swift 3.0NSDecimalNumber(string: "42.42") // Using NSNumberlet number3 = NSNumber(float:("42.42" as NSString).floatValue)

The extension-wayThis is better, really, because it'll play nicely with locales and decimals.

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

Now you can simply do:

let someFloat = "42.42".numberValuelet someInt = "42".numberValue