Como se pode converter um NSString
contendo um número de qualquer tipo de dados primitivos (por exemplo int
, float
, char
, unsigned int
, etc.)? O problema é que não sei qual tipo de número a string conterá em tempo de execução.
Eu tenho uma idéia de como fazê-lo, mas não tenho certeza se isso funciona com qualquer tipo, também com valores de ponto flutuante e sem sinal:
long long scannedNumber;
NSScanner *scanner = [NSScanner scannerWithString:aString];
[scanner scanLongLong:&scannedNumber];
NSNumber *number = [NSNumber numberWithLongLong: scannedNumber];
Obrigado pela ajuda.
+currentLocale
, mas você está correto; é preciso sempre considerar o código do idioma ao lidar com a conversão de itens de e para a forma legível por humanos.Você pode usar
-[NSString integerValue]
,-[NSString floatValue]
etc. No entanto, a maneira correta (sensível ao código do idioma, etc.) é usar o-[NSNumberFormatter numberFromString:]
que fornecerá um NSNumber convertido do código do idioma apropriado e as configurações doNSNumberFormatter
(incluindo se ele permitirá flutuação valores pontuais).fonte
@"2000"
para umint
e[@"2000" integerValue]
funcionou bem e é um pouco mais simples para o meu caso.[NSNumber numberWithInteger ...]
Objetivo-C
(Observação: esse método não funciona bem com localidades diferentes, mas é um pouco mais rápido que a
NSNumberFormatter
)Rápido
Maneira simples, mas suja
O caminho da extensão Isso é melhor, realmente, porque vai funcionar bem com códigos de idioma e decimais.
Agora você pode simplesmente fazer:
fonte
,
e.
o outro em torno de forma (por exemplo,42.000,42
alguma coisa.floatValue
Provavelmente não leva em conta?@([@"42" intValue])
funcionasse perfeitamente. Não estou preocupado com o local.Para cadeias começando com números inteiros, por exemplo,
@"123"
,@"456 ft"
,@"7.89"
, etc., o uso-[NSString integerValue]
.Então,
@([@"12.8 lbs" integerValue])
é como fazer[NSNumber numberWithInteger:12]
.fonte
Você também pode fazer isso:
Diverta-se!
fonte
Se você souber que recebe números inteiros, poderá usar:
fonte
Aqui está um exemplo de trabalho do NSNumberFormatter lendo o número localizado NSString (xCode 3.2.4, osX 10.6), para salvar outras pessoas das horas que passei brincando. Cuidado: embora ele possa lidar com espaços em branco à direita (funciona "8.765,4"), isso não pode lidar com espaços em branco à esquerda e caracteres de texto dispersos. (Sequências de entrada incorretas: "8" e "8q" e "8 q".)
fonte
Eu queria converter uma string em um dobro. Essa resposta acima não funcionou para mim. Mas o que aconteceu: Como fazer conversões de string no Objective-C?
Tudo o que praticamente fiz foi:
fonte
Obrigado a todos! Eu sou um feedback combinado e, finalmente, consigo converter da entrada de texto (string) para Inteiro. Além disso, poderia me dizer se a entrada é um número inteiro :)
fonte
Eu acho que NSDecimalNumber fará isso:
Exemplo:
NSDecimalNumber é uma subclasse de NSNumber, portanto, a conversão implícita é permitida.
fonte
E o padrão do C
atoi
?Você acha que existem algumas ressalvas?
fonte
Você pode apenas usar
[string intValue]
ou[string floatValue]
ou[string doubleValue]
etcVocê também pode usar a
NSNumberFormatter
classe:fonte
você também pode fazer como este código 8.3.3 ios 10.3 support
fonte
fonte
Trabalhou no Swift 3
fonte
Eu sei que é muito tarde, mas o código abaixo está funcionando para mim.
Experimente este código
NSNumber *number = @([dictionary[@"keyValue"] intValue]]);
Isso pode ajudá-lo. obrigado
fonte
Tente isto
Nota - usei longLongValue conforme minha exigência. Você também pode usar integerValue, longValue ou qualquer outro formato, dependendo dos seus requisitos.
fonte
fonte