How to convert an NSString into an NSNumber
如何转换包含任意基元数据类型(如
我知道如何操作,但我不确定这是否适用于任何类型,也包括无符号和浮点值:
| 1 2 3 4 | long long scannedNumber; NSScanner *scanner = [NSScanner scannerWithString:aString]; [scanner scanLongLong:&scannedNumber]; NSNumber *number = [NSNumber numberWithLongLong: scannedNumber]; | 
谢谢你的帮助。
使用
| 1 2 3 | NSNumberFormatter *f = [[NSNumberFormatter alloc] init]; f.numberStyle = NSNumberFormatterDecimalStyle; NSNumber *myNumber = [f numberFromString:@"42"]; | 
如果字符串不是有效数字,那么
您可以使用
Objtovi-C
(注:此方法在不同的区域设置下效果不好,但比
| 1 2 | NSNumber *num1 = @([@"42" intValue]); NSNumber *num2 = @([@"42.42" floatValue]); | 
迅捷
简单但肮脏的方式
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | // 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) | 
延长线这确实更好,因为它可以很好地处理区域和小数。
| 1 2 3 4 5 6 7 8 | extension String { var numberValue:NSNumber? { let formatter = NSNumberFormatter() formatter.numberStyle = .DecimalStyle return formatter.number(from: self) } } | 
现在您只需执行以下操作:
| 1 2 | let someFloat ="42.42".numberValue let someInt ="42".numberValue | 
对于以整数开头的字符串,如
所以,
您也可以这样做:
| 1 | NSNumber *number = @([dictionary[@"id"] intValue]]); | 
玩得高兴!
如果知道接收整数,可以使用:
| 1 2 | NSString* val = @"12"; [NSNumber numberWithInt:[val intValue]]; | 
下面是一个nsnumberFormatter的工作示例,它读取本地化的nsstring(xcode 3.2.4,osx 10.6),以节省其他人刚刚花掉的时间。注意:虽然它可以处理尾随空格("8765.4"有效),但它不能处理前导空格,也不能处理多余的文本字符。(错误的输入字符串:"8"和"8q"以及"8q"。)
| 1 2 3 4 5 6 7 8 9 10 11 12 | 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 | 
我想把一个字符串转换成一个双精度字符串。上面的回答对我来说不太管用。但是这样做了:如何在Objective-C中进行字符串转换?
我所做的就是:
| 1 | double myDouble = [myString doubleValue]; | 
谢谢大家!我结合了反馈,最后设法将文本输入(字符串)转换为整数。另外,它还可以告诉我输入是否为整数:)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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可以做到:
例子:
| 1 | NSNumber *theNumber = [NSDecimalNumber decimalNumberWithString:[stringVariable text]]]; | 
nsdecimalNumber是nsnumber的子类,因此允许隐式强制转换。
C的标准
| 1 | 
你认为有什么警告吗?
您只需使用
您还可以使用
您也可以这样做:代码8.3.3 iOS 10.3支持
| 1 | [NSNumber numberWithInt:[@"put your string here" intValue]] | 
| 1 2 | NSDecimalNumber *myNumber = [NSDecimalNumber decimalNumberWithString:@"123.45"]; NSLog(@"My Number : %@",myNumber); | 
试试这个
| 1 | NSNumber *yourNumber = [NSNumber numberWithLongLong:[yourString longLongValue]]; | 
注-我已按要求使用了longlongvalue。您还可以根据需要使用integervalue、longvalue或任何其他格式。
在Swift 3工作
| 1 | NSDecimalNumber(string:"Your string") | 
我知道这很晚了,但是下面的代码对我很有效。
试试这个代码
这可能对你有帮助。谢谢
| 1 2 3 4 5 6 7 8 9 10 | extension String { var numberValue:NSNumber? { let formatter = NumberFormatter() formatter.numberStyle = .decimal return formatter.number(from: self) } } let someFloat ="12.34".numberValue |