Domanda

Il mio codice è simile a questo

NSNumber *inputToNumber = [NSNumber numberWithFloat:[textField.text floatValue]];

il valore dal campo di testo è in realtà un numero di telefono. È memorizzato in NSNumber come un fastidioso (2.0) 78966e + 08

Come posso semplicemente ottenere NSNumber per memorizzarlo come 0207896608?

È stato utile?

Soluzione

La notazione scientifica viene utilizzata in molti linguaggi informatici come output predefinito di numeri molto grandi (o molto piccoli). Se si desidera che il numero venga emesso come decimale, è necessario specificare il formato di output (l'implementazione varia in base alla lingua.)

Inoltre, julesjacobs è corretto. Non utilizzare FLOAT per un numero di telefono poiché è soggetto a errori di arrotondamento binario. L'uso di INT o STRING ti farà risparmiare un sacco di mal di testa.

Altri suggerimenti

Penso che l'idea di base per memorizzare un numero di telefono in un NSNumber sia errata:

  • come si fa a discriminare tra numeri con o senza 0 iniziale?
  • come si memorizzano i numeri di telefono da paesi stranieri?

Vorrei usare NSString al posto di NSNumber.

Solo perché si chiama un numero non significa un " numero di telefono " è un numero nello stesso senso in cui "5" o " pi " sono.

O dovresti considerare un numero di telefono come una stringa, oppure dovresti creare una classe del modello TelephoneNumber per rappresentarli.

Considera che ci sono posti nel mondo in cui i numeri non hanno 0 iniziali e in cui un numero con uno 0 iniziale non è lo stesso numero senza uno 0 iniziale

05843924 != 5843924

Quindi smetti di essere pigro con quegli hack NSNumber e costruisci la tua classe di numeri di telefono.

Se devi essere in grado di gestirlo come numeri, forse dovresti scomporlo nelle sue parti e memorizzarle come numeri interi.

01112223333
country code 0
area code 111
prefix 222
number 3333

O potresti conservare tutto come una stringa se non hai bisogno di manipolarlo.

Stai memorizzando un numero di telefono in un float? Dovresti considerare di utilizzare un numero intero o una stringa. Forse:

NSNumber *inputToNumber = [NSNumber numberWithInt:[textField.text intValue]];

Ehi ragazzi cosa ne pensate, sembra riempire completamente i miei scopi. Solo il Regno Unito al momento quindi si preoccuperà della localizzazione quando ne avrò la possibilità.

Lo uso per memorizzare il numero

NSNumber *inputToNumber = [NSNumber numberWithLongLong:(long long)[[textField.text stringByReplacingOccurrencesOfString:@" " withString:@""] longLongValue]];

E questo metodo formatta il mio numero di telefono e si occupa del precedente 0 menzionato.

-(NSString *)phoneNumberString:(NSNumber *)phoneNumber {
    //Add a zero because NSNumber won't save a preceeding zero
    NSString *telephoneString = [[NSString alloc] initWithFormat:@"0%@", [phoneNumber stringValue]];

    if (telephoneString.length >= 4) {
        NSString *firstPart = [[NSString alloc] initWithString: [telephoneString substringToIndex:4]];
        NSString *secondPart = [[NSString alloc] initWithString: [telephoneString substringFromIndex:4]];

        //Add the two parts together with a space inbetween
        NSString *formattedTelephoneString = [NSString stringWithFormat:@"%@ %@", firstPart, secondPart];

        //send it back to the cellForRow TableCell Method
        [firstPart release];
        [secondPart release];
        [telephoneString release];

        return formattedTelephoneString;    
    }
    else {
        return telephoneString; 
    }
}

Grazie per tutti i commenti. Segnerò la risposta come chiunque abbia suggerito NSString poiché temo che tornerò a utilizzare NSString per questo invece della mia soluzione precedente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top