如何将NSString转换为NSNumber

我怎样才能转换包含任何原始数据类型(例如intfloatcharunsigned int等)的NSString ? 问题是,我不知道字符串在运行时将包含哪些数字类型。

我有一个想法如何做到这一点,但我不确定这是否适用于任何类型,无符号和浮点值:

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

谢谢您的帮助。


使用NSNumberFormatter

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

如果该字符串不是有效的号码,那么myNumbernil 。 如果它是一个有效的数字,那么你现在已经拥有了NSNumber所有优点来找出它实际上是什么类型的数字。


你可以使用-[NSString integerValue]-[NSString floatValue]等。但是,正确的(区域设置敏感的等)的方式是使用-[NSNumberFormatter numberFromString:] ,它会给你一个NSNumber转换适当的语言环境并给定NSNumberFormatter的设置(包括是否允许浮点值)。


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 = NSNumberFormatter()
        formatter.numberStyle = .DecimalStyle
        return formatter.number(from: self)
    }
}

现在你可以简单地做:

let someFloat = "42.42".numberValue
let someInt = "42".numberValue
链接地址: http://www.djcxy.com/p/30663.html

上一篇: How to convert an NSString into an NSNumber

下一篇: How to link to apps on the app store