Pregunta

Mi código se ve así

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

el valor del campo de texto es en realidad un número de teléfono. Se almacena en NSNumber como un molesto (2.0) 78966e + 08

¿Cómo puedo hacer que NSNumber lo almacene como 0207896608?

¿Fue útil?

Solución

La notación científica se usa en muchos lenguajes de computadora como salida predeterminada de números muy grandes (o muy pequeños). Si desea que el número se envíe como un decimal, debe especificar el formato de salida (la implementación varía según el idioma).

Además, julesjacobs es correcto. No debe usar FLOAT para un número de teléfono, ya que está sujeto a errores de redondeo binario. Usar INT o STRING te ahorrará muchos dolores de cabeza.

Otros consejos

Creo que la idea básica de almacenar un número de teléfono en un NSNumber es errónea:

  • ¿cómo discrimina entre números con o sin el 0 inicial?
  • ¿cómo almacena números de teléfono de países extranjeros?

Usaría NSString en lugar de NSNumber.

El hecho de que se llame un número no significa un " número de teléfono " es un número en el mismo sentido que '' 5 '' o "pi" son.

O debe tratar un número de teléfono como una cadena, o debe crear una clase de modelo TelephoneNumber para representar cada uno.

Considere que hay lugares en el mundo donde los números no tienen ceros a la izquierda y donde un número con un 0 a la izquierda no es lo mismo que el mismo número sin un 0 a la izquierda.

05843924 != 5843924

Así que deja de ser flojo con los hacks de NSNumber y crea tu propia clase de número de teléfono.

Si necesita poder tratarlo como números, tal vez debería dividirlo en sus partes y almacenar cada parte como un entero.

01112223333
country code 0
area code 111
prefix 222
number 3333

O podría almacenar todo como una cadena si no necesita manipularlo.

¿Estás almacenando un número de teléfono en una carroza? Debe considerar usar un entero o una cadena. Quizás:

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

Hola chicos, ¿qué piensan de esto? Parece que llena mis propósitos. Solo el Reino Unido en este momento se preocupará por la localización cuando tenga la oportunidad.

Utilizo esto para almacenar el número

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

Y este método formatea mi número de teléfono y se ocupa del precedente 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; 
    }
}

Gracias por todos los comentarios. Marcaré la respuesta como quien sugirió NSString ya que me temo que volveré a usar NSString para esto en lugar de mi solución anterior.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top