如何将NSString转换为NSNumber
我怎样才能转换包含任何原始数据类型(例如int
, float
, char
, unsigned 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"];
如果该字符串不是有效的号码,那么myNumber
将nil
。 如果它是一个有效的数字,那么你现在已经拥有了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