关于C#:如何将nsstring转换为nsnumber

How to convert an NSString into an NSNumber

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

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

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

谢谢你的帮助。


使用NSNumberFormatter

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

如果字符串不是有效数字,那么myNumber将是nil。如果它是一个有效的数字,那么你现在就有了所有的NSNumber的优点来计算它实际上是什么类型的数字。


您可以使用-[NSString integerValue]-[NSString floatValue]等。但是,正确的(区分区域设置等)方法是使用-[NSNumberFormatter numberFromString:],它将为您提供从适当区域设置转换的nsnumber,并给定NSNumberFormatter的设置(包括是否允许浮点值)。


Objtovi-C

(注:此方法在不同的区域设置下效果不好,但比NSNumberFormatter稍快)

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


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

所以,@([@"12.8 lbs" integerValue])就像做[NSNumber numberWithInteger:12]一样。


您也可以这样做:

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的标准atoi怎么样?

1
int num = atoi([scannedNumber cStringUsingEncoding:NSUTF8StringEncoding]);

你认为有什么警告吗?


您只需使用[string intValue][string floatValue][string doubleValue]

您还可以使用NSNumberFormatter类:


您也可以这样做:代码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")


我知道这很晚了,但是下面的代码对我很有效。

试试这个代码

NSNumber *number = @([dictionary[@"keyValue"] intValue]]);

这可能对你有帮助。谢谢


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