Pergunta

Os meus olhares código como este

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

O valor do campo de texto é realmente um número de telefone. É armazenado em NSNumber como um irritante (2,0) 78966e + 08

Como posso só pegar NSNumber para armazená-lo como 0207896608?

Foi útil?

Solução

A notação científica é usada em linguagens de computador maio como a saída padrão de muito grandes (ou muito pequenos) números. Se você deseja que o número a ser debitada como um decimal, será necessário especificar o formato de saída (a implementação varia de um idioma.)

Além disso, julesjacobs está correto. Você não deve usar flutuar por um número de telefone, uma vez que está sujeita a erros de arredondamento binários. Usando INT ou string vai lhe poupar muita dor de cabeça.

Outras dicas

Eu acho que a idéia básica para armazenar um número de telefone em um NSNumber é falho:

  • como você discriminar entre números com ou sem líder 0?
  • como você armazenar números de telefone a partir de países estrangeiros?

Gostaria de usar NSString no lugar de NSNumber.

Só porque ele é chamado um número não significa um "número de telefone" é um número no mesmo sentido que "5" ou "pi" é.

Ou você deve tratar um número de telefone como uma string, ou você deve criar uma classe de modelo TelephoneNumber para representar cada um.

Considere que existem lugares no mundo onde os números não têm líder 0 e onde um número com um 0 não é o mesmo que o mesmo número sem um 0.

05843924 != 5843924

Então pare de ser preguiçoso com que os hacks NSNumber e construir sua própria classe de telefone-número.

Se você precisa ser capaz de lidar com ele como números talvez você deve dividi-lo em suas partes, e armazenar cada parte como um inteiro.

01112223333
country code 0
area code 111
prefix 222
number 3333

Ou você poderia armazenar a coisa toda como uma string, se você não precisa de manipulá-lo.

Você está armazenando um número de telefone em uma bóia? Você deve considerar o uso de um inteiro ou string. Talvez:

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

Ei o que você acha disso, Parece meus propósitos full-preencher. Apenas Reino Unido no momento, então vai se preocupar com a localização quando eu tiver uma chance.

Eu uso isso para ficar para armazenar o número

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

E este método formata o meu número de telefone e cuida do que precede 0 mencionado.

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

Obrigado por todos os comentários. Vou marcar a resposta como quem sugeriu NSString como eu temo que irá reverter para usando NSString para isso em vez de minha solução acima.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top