Como fazer conversões de string em Objective-C?

Eu quero converter uma string em um double e depois de fazer algumas contas, convertê-lo de volta para uma string.

Como faço isso no Objective-C?

Existe uma maneira de arredondar um duplo para o inteiro mais próximo também?

Você pode converter um NSString em um duplo com

double myDouble = [myString doubleValue]; 

Arredondamento para o próximo int pode ser feito como

 int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5)) 

Eu sinceramente não tenho certeza se há uma maneira mais simplificada para converter de volta em uma string de

 NSString* myNewString = [NSString stringWithFormat:@"%d", myInt]; 

Para realmente converter de uma string para um número corretamente, você precisa usar uma instância de NSNumberFormatter configurada para a localidade da qual você está lendo a string.

Locais diferentes irão formatar números de forma diferente. Por exemplo, em algumas partes do mundo, o COMMA é usado como um separador decimal, enquanto em outros ele é PERIOD – e o separador de milhares (quando usado) é invertido. Exceto quando é um espaço. Ou não presente de todo.

Isso realmente depende da proveniência da input. A coisa mais segura a fazer é configurar um NSNumberFormatter para a forma como sua input é formatada e usar -[NSFormatter numberFromString:] para obter um NSNumber dela. Se você quiser manipular erros de conversão, poderá usar -[NSFormatter getObjectValue:forString:range:error:] .

Adicionando a resposta do olliej, você pode converter de um int de volta para uma string com stringValue do stringValue :

 [[NSNumber numberWithInt:myInt] stringValue] 

stringValue em um NSNumber invoca descriptionWithLocale:nil , dando a você uma representação de string localizada de valor. Não tenho certeza se [NSString stringWithFormat:@"%d",myInt] lhe dará uma representação adequada de myInt.

O método de arredondamento do olliej está errado para números negativos

  • 2.4 arredondado é 2 (o método de olliej acerta)
  • −2,4 arredondado é −2 (o método de olliej retorna -1)

Aqui está uma alternativa

  int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5)) 

Você poderia, claro, usar uma function de arredondamento de math.h

Aqui está um exemplo de trabalho do NSNumberFormatter lendo o número localizado String (xCode 3.2.4, osX 10.6), para salvar outras horas que passei brincando. Cuidado: enquanto ele pode lidar com espaços em branco à direita, como “8.765,4”, isso não pode manipular o espaço em branco inicial e isso não pode manipular caracteres de texto dispersos. (Cadeias de input incorretas: “8” e “8q” e “8 q”.)

 NSString *tempStr = @"8,765.4"; // localization allows other thousands separators, also. NSNumberFormatter * myNumFormatter = [[NSNumberFormatter alloc] init]; [myNumFormatter setLocale:[NSLocale currentLocale]]; // happen by default? [myNumFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4]; // next line is very important! [myNumFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; // crucial NSNumber *tempNum = [myNumFormatter numberFromString:tempStr]; NSLog(@"string '%@' gives NSNumber '%@' with intValue '%i'", tempStr, tempNum, [tempNum intValue]); [myNumFormatter release]; // good citizen 
 // Converting String in to Double double doubleValue = [yourString doubleValue]; // Converting Double in to String NSString *yourString = [NSString stringWithFormat:@"%.20f", doubleValue]; // .20f takes the value up to 20 position after decimal // Converting double to int int intValue = (int) doubleValue; or int intValue = [yourString intValue]; 

Para arredondamentos, você provavelmente deve usar as funções C definidas em math.h.

 int roundedX = round(x); 

Mantenha pressionada Option e clique duas vezes na round no Xcode e ele mostrará a página de manual com várias funções para arredondar diferentes tipos.

Para conversão de um número para uma string, que tal usar a nova syntax de literais (XCode> = 4.4), é um pouco mais compacto.

 int myInt = (int)round( [@"1.6" floatValue] ); NSString* myString = [@(myInt) description]; 

(Boxes como um NSNumber e converte em uma string usando o método de descrição do NSObjects )

Esta é a maneira mais fácil que eu conheço:

 float myFloat = 5.3; NSInteger myInt = (NSInteger)myFloat; 

deste exemplo aqui, você pode ver as conversões nos dois sentidos:

 NSString *str=@"5678901234567890"; long long verylong; NSRange range; range.length = 15; range.location = 0; [[NSScanner scannerWithString:[str substringWithRange:range]] scanLongLong:&verylong]; NSLog(@"long long value %lld",verylong); 

converter texto inserido no campo de texto para inteiro

 double mydouble=[_myTextfield.text doubleValue]; 

arredondando para o dobro mais próximo

 mydouble=(round(mydouble)); 

arredondamento para o int mais próximo (considerando apenas valores positivos)

 int myint=(int)(mydouble); 

convertendo de double para string

 myLabel.text=[NSString stringWithFormat:@"%f",mydouble]; 

ou

 NSString *mystring=[NSString stringWithFormat:@"%f",mydouble]; 

convertendo de int para string

 myLabel.text=[NSString stringWithFormat:@"%d",myint]; 

ou

 NSString *mystring=[NSString stringWithFormat:@"%f",mydouble]; 

Acabei usando essa macro prática:

 #define STRING(value) [@(value) stringValue]