objective c - كيفية تحويل NSString إلى NSNumber




objective-c primitive-types (12)

كيف يمكنني تحويل NSString يحتوي على عدد من أي نوع بيانات بدائي (مثل int أو float أو char أو unsigned int إلخ)؟ المشكلة هي ، لا أعرف أي نوع الرقم ستحتوي السلسلة في وقت التشغيل.

لدي فكرة عن كيفية القيام بذلك ، ولكن لست متأكداً إذا كان هذا يعمل مع أي نوع ، وكذلك قيم النقاط غير الموقعة والعائمة:

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

شكرا للمساعدة.


ج موضوعية

(ملاحظة: لا تلعب هذه الطريقة مع اختلاف لغات ، ولكن أسرع قليلاً من 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

أعتقد أن NSDecimalNumber سيفعل ذلك:

مثال:

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

NSDecimalNumber هو فئة فرعية من NSNumber ، لذلك يسمح بالضغط الضمني.


استخدم NSNumberFormatter :

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

إذا كانت السلسلة ليست رقمًا صحيحًا ، فسيكون myNumber nil . إذا كان رقمًا صحيحًا ، فأنت الآن تمتلك كل الخير NSNumber لمعرفة أي نوع من الرقم هو في الواقع.


جرب هذا

NSNumber *yourNumber = [NSNumber numberWithLongLong:[yourString longLongValue]];

ملاحظة - لقد استخدمت longLongValue وفقا لمتطلبات بلدي. يمكنك أيضًا استخدام integerValue أو longValue أو أي تنسيق آخر وفقًا لمتطلباتك.


عملت في سويفت 3

NSDecimalNumber(string: "Your string") 


ماذا عن atoi القياسية C؟

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

هل تعتقد أن هناك أي تحذيرات؟


وأنا أعلم أن هذا هو متأخر جدا ولكن يعمل دون رمز بالنسبة لي.

جرب هذا الكود

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

هذا قد يساعدك. شكر


يمكنك أيضًا القيام بذلك:

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

إستمتع!


يمكنك أيضًا القيام بهذا الرمز 8.3.3 ios 10.3 support

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

يمكنك فقط استخدام [string intValue] أو [string floatValue] أو [string doubleValue] etc

يمكنك أيضًا استخدام فئة NSNumberFormatter :


NSDecimalNumber *myNumber = [NSDecimalNumber decimalNumberWithString:@"123.45"];
NSLog(@"My Number : %@",myNumber);




primitive-types