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 |