objective-c - nsnumberformatterdecimalstyle - nsstring to nsnumber




如何將NSString轉換為NSNumber (12)

我怎樣才能轉換包含任何原始數據類型(例如intfloatcharunsigned int等)的NSString ? 問題是,我不知道字符串在運行時將包含哪些數字類型。

我有一個想法如何做到這一點,但我不確定這是否適用於任何類型,無符號和浮點值:

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

謝謝您的幫助。


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

C的標準atoi怎麼樣?

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

你認為有什麼警告?


你也可以像這樣的代碼8.3.3支持ios 10.3

[NSNumber numberWithInt:[@"put your string here" intValue]]

你也可以這樣做:

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

玩的開心!


你可以使用[string intValue][string floatValue][string doubleValue]

你也可以使用NSNumberFormatter類:


使用NSNumberFormatter

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

如果該字符串不是有效的號碼,那麼myNumbernil 。 如果它是一個有效的數字,那麼你現在已經擁有了NSNumber所有優點來找出它實際上是什麼類型的數字。


Swift工作3

NSDecimalNumber(string: "Your string") 

如果你知道你收到整數,你可以使用:

NSString* val = @"12";
[NSNumber numberWithInt:[val intValue]];


我知道這是很晚,但下面的代碼是為我工作。

試試這個代碼

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

這可能會幫助你。 謝謝


謝謝大家! 我結合反饋,並最終設法從文本輸入(字符串)轉換為整數。 另外它可以告訴我輸入是否是整數:)

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 *myNumber = [NSDecimalNumber decimalNumberWithString:@"123.45"];
NSLog(@"My Number : %@",myNumber);




primitive-types