¿Cómo puedo convertir una NSString
que contiene un número de cualquier tipo de datos primitivo (por ejemplo int
, float
, char
, unsigned int
, etc.)? El problema es que no sé qué tipo de número contendrá la cadena en tiempo de ejecución.
Tengo una idea de cómo hacerlo, pero no estoy seguro de si esto funciona con algún tipo, también con valores de coma flotante y sin signo:
long long scannedNumber;
NSScanner *scanner = [NSScanner scannerWithString:aString];
[scanner scanLongLong:&scannedNumber];
NSNumber *number = [NSNumber numberWithLongLong: scannedNumber];
Gracias por la ayuda.
+currentLocale
, pero estás en lo correcto; siempre se debe tener en cuenta el entorno local cuando se trata de convertir cosas de forma legible por humanos.Puede usar
-[NSString integerValue]
,-[NSString floatValue]
etc. Sin embargo, la forma correcta de hacerlo (sensible a la configuración regional, etc.) es usar una-[NSNumberFormatter numberFromString:]
que le dará un NSNumber convertido de la configuración regional apropiada y la configuración deNSNumberFormatter
(incluyendo si permitirá la flotación valores puntuales).fuente
@"2000"
aint
y[@"2000" integerValue]
funcionó bien y es un poco más simple para mi caso.[NSNumber numberWithInteger ...]
C objetivo
(Nota: este método no funciona bien con las configuraciones regionales de diferencia, pero es un poco más rápido que a
NSNumberFormatter
)Rápido
Manera simple pero sucia
La forma de extensión Esto es mejor, realmente, porque jugará muy bien con configuraciones regionales y decimales.
Ahora simplemente puedes hacer:
fuente
,
y.
al revés (por ejemplo42.000,42
. ¿Algo quefloatValue
probablemente no tiene en cuenta?@([@"42" intValue])
funcionó perfectamente. No me preocupa Locale.Para las cadenas que comienzan con números enteros, por ejemplo,
@"123"
,@"456 ft"
,@"7.89"
, etc, el uso-[NSString integerValue]
.Entonces,
@([@"12.8 lbs" integerValue])
es como hacer[NSNumber numberWithInteger:12]
.fuente
También puedes hacer esto:
¡Que te diviertas!
fuente
Si sabe que recibe números enteros, puede usar:
fuente
Aquí hay una muestra funcional de NSNumberFormatter que lee el número localizado NSString (xCode 3.2.4, osX 10.6), para ahorrarle a los demás las horas que acabo de perder. Cuidado: aunque puede manejar espacios en blanco finales ("8,765.4" funciona), esto no puede manejar espacios en blanco iniciales y esto no puede manejar caracteres de texto extraviados. (Cadenas de entrada incorrectas: "8" y "8q" y "8 q".)
fuente
Quería convertir una cadena a un doble. Esta respuesta anterior no funcionó para mí. Pero esto hizo: ¿Cómo hacer conversiones de cadenas en Objective-C?
Todo lo que hice fue:
fuente
¡Gracias a todos! Me combinan los comentarios y finalmente logro convertir la entrada de texto (cadena) a Entero. Además, podría decirme si la entrada es entera :)
fuente
Creo que NSDecimalNumber lo hará:
Ejemplo:
NSDecimalNumber es una subclase de NSNumber, por lo que se permite la conversión implícita.
fuente
¿Qué pasa con el estándar de C
atoi
?¿Crees que hay algunas advertencias?
fuente
Puedes usar
[string intValue]
o[string floatValue]
o[string doubleValue]
etc.También puedes usar
NSNumberFormatter
class:fuente
también puede hacer como este código 8.3.3 ios 10.3 soporte
fuente
fuente
Trabajó en Swift 3
fuente
Sé que esto es muy tarde, pero el siguiente código está funcionando para mí.
Prueba este código
NSNumber *number = @([dictionary[@"keyValue"] intValue]]);
Esto puede ayudarte. Gracias
fuente
Prueba esto
Nota: he usado longLongValue según mi requisito. También puede usar integerValue, longValue o cualquier otro formato, según sus requisitos.
fuente
fuente