objective-c - serve - wikipedia linguaggio c++




Come convertire una NSString in un NSNumber (12)

Come posso convertire una NSString contenente un numero qualsiasi di tipi di dati primitivi (es. int , float , char , unsigned int , ecc.)? Il problema è che non so quale tipo di numero la stringa conterrà in fase di esecuzione.

Ho un'idea su come farlo, ma non sono sicuro che funzioni con qualsiasi tipo, anche senza segno e valori in virgola mobile:

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

Grazie per l'aiuto.


Objective-C

(Nota: questo metodo non funziona bene con le differenze locali, ma è leggermente più veloce di un NSNumberFormatter )

NSNumber *num1 = @([@"42" intValue]);
NSNumber *num2 = @([@"42.42" floatValue]);

veloce

Modo semplice ma sporco

// 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)

Il modo di estensione Questo è meglio, davvero, perché giocherà bene con local e decimali.

extension String {

    var numberValue:NSNumber? {
        let formatter = NSNumberFormatter()
        formatter.numberStyle = .DecimalStyle
        return formatter.number(from: self)
    }
}

Ora puoi semplicemente fare:

let someFloat = "42.42".numberValue
let someInt = "42".numberValue

Che ne dici di atoi standard di atoi ?

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

Pensi che ci siano dei caveat?


Ha lavorato in Swift 3

NSDecimalNumber(string: "Your string") 

Penso che NSDecimalNumber lo farà:

Esempio:

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

NSDecimalNumber è una sottoclasse di NSNumber, quindi è consentita la trasmissione implicita.


Prova questo

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

Nota: ho usato longLongValue secondo il mio requisito. È inoltre possibile utilizzare un valore intero, un valore lungo o qualsiasi altro formato in base alle proprie esigenze.


Puoi anche fare questo:

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

Divertiti!


Puoi usare -[NSString integerValue] , -[NSString floatValue] , ecc. Tuttavia, il modo corretto (sensibile alla localizzazione, ecc.) Per farlo è usare -[NSNumberFormatter numberFromString:] che ti darà un NSNumber convertito da le impostazioni internazionali appropriate e le impostazioni di NSNumberFormatter (incluso se consentirà valori in virgola mobile).


Ringrazia tutti! Sono un feedback combinato e finalmente riesco a convertire da input di testo (stringa) a Integer. Inoltre potrebbe dirmi se l'input è intero :)

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];

So che è molto tardi, ma il codice sottostante sta funzionando per me.

Prova questo codice

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

Questo potrebbe aiutarti. Grazie


Usa un NSNumberFormatter :

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

Se la stringa non è un numero valido, myNumber sarà nil . Se è un numero valido, ora hai tutta la bontà NSNumber per capire che tipo di numero è effettivamente.


puoi anche fare come questo codice 8.3.3 supporto ios 10.3

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

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




primitive-types