2010-07-02 9 views
5

Quiero convertir NSString a NSNumber sin utilizar numbreFromString: method? El numbreFromString: metgod está actuando de manera extraña en 4.0. Entonces quiero usar una alternativa para convertir NSString en NSNumber. Por favor, ayúdame ....Cómo convertir NSString a NSNumber sin usar numberfromstring

+ (NSString *)formatText:(NSString *) text withLocalSettings:(BOOL) isLacale { 

    NSNumber *aNsNumber= [numberFormatter numberFromString: text]; 
    NSString *returnString = [NSString stringWithString:[numberFormatter stringForObjectValue:aNsNumber]]; 

    if(isLacale) { 
     return returnString; 
    } 
    else { 
     return [NSString stringWithFormat:@"%lf",[aNsNumber doubleValue]]; 
    } 
} 

Estoy desarrollando una aplicación que necesito para ejecutar mi aplicación tanto en 3.0 y 4.0. Tengo un campo de texto en el que cuando intento ingresar números en el campo de texto el comportamiento es así ... IN 3.0: - Permite ingresar 7 dígitos y 2 valores fraccionarios (lo he formateado así). He formateado y localizado los números junto con las separaciones de coma dependiendo del país seleccionado. Está funcionando perfectamente en 3.0 y 3.1.2

IN 4.0: - Te permite ingresar solo 4 números y luego de ingresar 5to dígito hace que los campos de texto se vacíen .. Nada se visualiza cuando ingresas el 5to número y cuando Ingrese el 6º número desde el 1er número y continúa el mismo hasta 4 números. ej .: cuando ingresa 1234, aparece el campo de texto - 1234 y cuando ingresa 12345, aparece el campo de texto "". y cuando ingresa 6 ahora comienza con 6 y así sucesivamente ..

Estoy usando el método NSNumberFormatter y numberfromstring para formatear los valores ingresados ​​en el campo de texto.

no soy capaz de entender por qué ocurre esto así ... Por favor, ayúdame ...

+0

Probablemente intentaré averiguar por qué el método funciona de forma extraña. En 9 de cada 10 casos, el problema radica en la entrada. Publique su código y aporte; eso nos dará más para trabajar. –

+0

+ (NSString *) formatText: (NSString *) texto con LocalSettings: (BOOL) isLacale { \t [numberFormatter retain]; \t NSNumber * aNsNumber = [[NSNumber alloc] init]; \t aNsNumber = [numberFormatter numberFromString: text]; \t \t // NSLog (@ "El valor de NSNumber es ...% @", aNsNumber); \t NSString * returnString = [NSString stringWithString: [numberFormatter stringForObjectValue: unNsNumber]]; \t \t if (isLacale) { \t \t return returnString; \t} else { \t \t \t retorno [NSString stringWithFormat: @ "% lf", [aNsNumber doubleValue]]; } –

+0

aNSNumber se está volviendo nulo en 4.0 después de ingresar 4 números en los campos de texto y cuando ingresa el 5to. Número en el campo de texto e intenta llamar a este formato Método de texto, aNsNumber pasa a ser nulo en 4.0 pero en 3.0 a 3.1.3 funciona bien ... –

Respuesta

16
[NSNumber numberWithInteger:[theString integerValue]]; 
[NSNumber numberWithDouble:[theString doubleValue]]; 

también floatValue, intValue, longLongValue, BOOLVALUE

Editar:

retirar de él comas, utilice stringByReplacingOccurrencesOfString antes de hacer lo anterior.

theString = [theString stringByReplacingOccurrencesOfString:@"," withString:@""]; 

que se deben eliminar más de un carácter, se podía conseguir algo trabajar con componentsSeparatedByCharactersInSet.

theSet = [NSCharacterSet characterSetWith...]; 
theString = [[theString componentsSeparatedByCharactersInSet:theSet] componentsJoinedByString:@""]; 
+0

Tengo un valor de cadena donde contiene una coma. Ej: - 1,234. Quiero obtener el valor de la cadena donde solo necesito 1234. ¿Pueden ayudarme por favor? –

0

iOS4 es muy exigente cuando se trata de formato de números.

En su código de ejemplo, transfiere una configuración regional: asegúrese de que el separador decimal de la cadena esté en línea con lo que se define en la configuración regional. Asegúrese de ingresar los números que están formateados correctamente (iOS4) id est nueve mil debería ser 9,000 y no 9000 si está usando DecimalStyle.

Si insiste en usar un analizador alternativo, sscanf an atoi podría ser una opción.

Utilice sscanf estándar de lib con el formateador o atoi, según los números que necesite convertir.

#include<stdio.h> 

int main(int argc, char **argv) { 

    char s[] = "1.2"; 
    double x; 

    sscanf(s, "%lf", &x); 
    printf("The decimal number was %g\n\n", x); 

    return 1; 
} 

atoi toma una cadena que contiene un entero y devuelve el valor como un int.