nsstring - 如何将NSString转换为一个NSNumber

  显示原文与译文双语对照的内容

如何转换包含任意基元数据类型的NSString ( 例如。 intfloatcharunsigned int,等等 )? 问题是,我不知道字符串在运行时将包含哪种类型。

我知道如何做它,但我不确定它是否适用于任何类型,也不包括无符号和浮点值:


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],等等,但是正确的( locale-sensitive,等等 ) 方式是使用 -[NSNumberFormatter numberFromString:] 它将给你一个从适当地区转换的NSNumber,并给出 NSNumberFormatter ( 包括是否允许浮点值)的设置。

对于以整数开始的字符串,比如,@"123"@"456 ft"@"7.89",等等,使用 -[NSString integerValue]

@([@"12.8 lbs" integerValue]) 就像做 [NSNumber numberWithInteger:12]

我很惊讶没有人提到 @-notation:


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

附录

而在Swift中:


if let intValue ="42".toInt() {
 let number1 = NSNumber(integer:intValue)
}
let number2 = NSNumber(float:("42.42" as NSString).floatValue)

下面是一个NSNumberFormatter的工作示例,它读取本地化的数字 NSString ( xCode 3.2.4,osX 10.6 ),以节省其他人的时间,我只是在浪费时间。 注意:虽然它可以处理尾随空格("8,765,4"工时),这不能处理前导空格,这不能处理无序的文本字符。 ( 错误的输入字符串:" 8"和" 8 q"和" 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

我想将字符串转换为 double 。 上面的答案对我来说并不合适。 但是这样做:如何在 objective-c 中执行字符串转换

我只做了这么多:


double myDouble = [myString doubleValue];

感谢所有我是组合的反馈,最终设法从文本输入( 字符串) 转换为整数。 另外它可以告诉我输入是否为整数:)


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];

我认为NSDecimalNumber会这么做:

例如:


NSNumber *theNumber = [NSDecimalNumber decimalNumberWithString:[stringVariable text]]];

NSDecimalNumber是NSNumber的子类,因此允许隐式转换。

...