Question

Mon code ressemble à ceci

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

la valeur du champ de texte est en fait un numéro de téléphone. Il est stocké dans NSNumber comme un ennuyeux (2.0) 78966e + 08

Comment puis-je simplement obtenir NSNumber pour le stocker sous le numéro 0207896608?

Était-ce utile?

La solution

La notation scientifique est utilisée dans de nombreux langages informatiques en tant que sortie par défaut de très grands (ou très petits) nombres. Si vous souhaitez que le nombre soit imprimé sous forme décimale, vous devez spécifier le format de sortie (l'implémentation varie en fonction de la langue.)

De plus, julesjacobs est correct. Vous ne devez pas utiliser FLOAT pour un numéro de téléphone car il est sujet à des erreurs d'arrondi binaires. Utiliser INT ou STRING vous évitera beaucoup de maux de tête.

Autres conseils

Je pense que l'idée de base de stocker un numéro de téléphone dans un NSNumber est erronée:

  • comment faites-vous la distinction entre les nombres avec ou sans le signe 0?
  • comment stockez-vous les numéros de téléphone de pays étrangers?

J'utiliserais NSString à la place de NSNumber.

Le simple fait d'appeler un numéro ne signifie pas un "numéro de téléphone". est un nombre dans le même sens que " 5 " ou " pi " sont.

Vous devez soit traiter un numéro de téléphone comme une chaîne, soit créer une classe de modèle TelephoneNumber pour les représenter.

Considérez qu’il existe des endroits dans le monde où les nombres ne sont pas précédés de 0 et où un nombre avec un 0 au premier n’est pas identique au même nombre sans le 0 au début.

05843924 != 5843924

Alors arrêtez de paresser avec ces hacks NSNumber et construisez votre propre classe de numéros de téléphone.

Si vous avez besoin de pouvoir le traiter sous forme de nombres, vous devriez peut-être le scinder en plusieurs parties et stocker chaque partie sous la forme d'un entier.

01112223333
country code 0
area code 111
prefix 222
number 3333

Vous pouvez également stocker le tout sous forme de chaîne si vous n'avez pas besoin de le manipuler.

Enregistrez-vous un numéro de téléphone dans un numéro flottant? Vous devriez envisager d'utiliser un entier ou une chaîne. Peut-être:

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

Hé les gars, que pensez-vous de cela, il semble remplir pleinement mes objectifs. Pour le moment, seul le Royaume-Uni s'inquiète donc de la localisation lorsque j'en ai l'occasion.

Je l'utilise pour stocker le numéro

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

Et cette méthode formate mon numéro de téléphone et s’occupe du 0 précédent.

-(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; 
    }
}

Merci pour tous les commentaires. Je vais marquer la réponse en tant que personne qui a suggéré NSString, car je crains que je ne retourne à l’utilisation de NSString pour cela au lieu de la solution ci-dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top