Eu quero converter uma seqüência de caracteres em um duplo e depois de fazer algumas contas, convertê-lo novamente em uma seqüência de caracteres.
Como faço isso no Objective-C?
Existe uma maneira de arredondar um dobro para o número inteiro mais próximo também?
objective-c
cocoa
cocoa-touch
rksprst
fonte
fonte
Respostas:
Você pode converter um NSString em um duplo com
O arredondamento para o int mais próximo pode ser feito como
Sinceramente, não tenho certeza se existe uma maneira mais simplificada de converter novamente em uma string do que
fonte
[[NSNumber numberWithInt:myInt] stringValue]
Para realmente converter de uma sequência para um número corretamente, você precisa usar uma instância
NSNumberFormatter
configurada para o código do idioma a partir do qual você está lendo a sequência.Diferentes localidades formatarão os números de maneira diferente. Por exemplo, em algumas partes do mundo,
COMMA
é usado como um separador decimal, enquanto em outras éPERIOD
- e o separador de milhares (quando usado) é invertido. Exceto quando é um espaço. Ou não está presente.Realmente depende da procedência da entrada. A coisa mais segura a fazer é configurar um
NSNumberFormatter
para a forma como sua entrada é formatada e usada-[NSFormatter numberFromString:]
para obter umaNSNumber
saída. Se você deseja lidar com erros de conversão, pode usar-[NSFormatter getObjectValue:forString:range:error:]
.fonte
Adicionando à resposta de olliej, você pode converter de um int de volta para uma string com
NSNumber
'sstringValue
:stringValue
em umaNSNumber
chamadadescriptionWithLocale:nil
, fornecendo uma representação de valor localizada da cadeia de caracteres. Não tenho certeza se[NSString stringWithFormat:@"%d",myInt]
isso lhe dará uma representação adequadamente localizada demyInt
.fonte
o método de arredondamento de olliej está errado para números negativos
Aqui está uma alternativa
Obviamente, você poderia usar uma função de arredondamento de math.h
fonte
Aqui está um exemplo de trabalho do NSNumberFormatter lendo o número localizado String (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, como "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
nil
valorNSNumber*
se não puder ser analisado. Não consigo reproduzir o problema que você teve com espaços em branco à esquerda e caracteres de texto dispersos; o IMO está funcionando corretamente." 28.5 "
analisa como 28,5, e"gibberish28.5"
,"28.5gibberish"
e"gibberish28.5gibberish"
são todos unparseable;" 2 8 . 5. "
é imparável, mas isso não é incomum.fonte
Para a conversão de um número em uma string, que tal usar a nova sintaxe de literais (XCode> = 4.4), é um pouco mais compacta.
(Encaixota-o como um NSNumber e converte-o em uma string usando o método de descrição dos NSObjects )
fonte
Para arredondar, você provavelmente deve usar as funções C definidas em math.h.
Mantenha pressionada a tecla Option e clique duas vezes
round
no Xcode e ele exibirá a página do manual com várias funções para arredondar tipos diferentes.fonte
Esta é a maneira mais fácil que eu conheço:
fonte
neste exemplo aqui, você pode ver as conversões nos dois sentidos:
fonte
converter texto digitado no campo de texto em número inteiro
arredondando para o dobro mais próximo
arredondamento para o int mais próximo (considerando apenas valores positivos)
convertendo de duplo para string
ou
convertendo de int para string
ou
fonte
Acabei usando esta macro prática:
fonte