문자열을 이중으로 변환하고 수학을 한 후 문자열로 다시 변환하고 싶습니다.
Objective-C에서 어떻게해야합니까?
double을 가장 가까운 정수로 반올림하는 방법이 있습니까?
문자열을 이중으로 변환하고 수학을 한 후 문자열로 다시 변환하고 싶습니다.
Objective-C에서 어떻게해야합니까?
double을 가장 가까운 정수로 반올림하는 방법이 있습니까?
답변:
NSString을 사용하여 이중으로 변환 할 수 있습니다
double myDouble = [myString doubleValue];
가장 가까운 정수로 반올림하면 다음과 같이 수행 할 수 있습니다
int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))
솔직히 문자열로 다시 변환하는보다 효율적인 방법이 있는지 확실하지 않습니다.
NSString* myNewString = [NSString stringWithFormat:@"%d", myInt];
[[NSNumber numberWithInt:myInt] stringValue]
실제로 문자열에서 숫자로 올바르게 변환하려면 문자열을 NSNumberFormatter
읽는 로케일에 대해 구성된 인스턴스를 사용해야 합니다.
로케일마다 숫자의 형식이 다릅니다. 예를 들어, 일부 지역 COMMA
에서는 소수 구분 기호로 사용되는 반면 다른 부분에서는 소수 구분 기호로 사용되며 PERIOD
천 단위 구분 기호 (사용 된 경우)는 반대로되어 있습니다. 공간 일 때를 제외하고 아니면 전혀 존재하지 않습니다.
실제로 입력의 출처에 따라 다릅니다. 가장 안전한 NSNumberFormatter
방법은 입력 형식을 지정하고 입력 -[NSFormatter numberFromString:]
을 얻는 데 사용 하는 NSNumber
것입니다. 변환 오류를 처리하려면-[NSFormatter getObjectValue:forString:range:error:]
대신 .
olliej의 대답에 추가, 당신의 문자열에있는 int 다시 변환 할 수 NSNumber
의 stringValue
:
[[NSNumber numberWithInt:myInt] stringValue]
stringValue
에서 NSNumber
호출 descriptionWithLocale:nil
하여 지역화 된 문자열 값 표현을 제공합니다. 의 [NSString stringWithFormat:@"%d",myInt]
현지화 된 적절한 표현을 제공할지 잘 모르겠습니다 myInt
.
NSNumberFormatter가 현지화 된 숫자 문자열 (xCode 3.2.4, osX 10.6)을 읽는 방금 샘플을 작성하여 방금 엉망인 시간을 절약 할 수 있습니다. 주의 : "8,765.4"와 같은 후행 공백을 처리 할 수 있지만 선행 공백은 처리 할 수없고, 표식 텍스트 문자는 처리 할 수 없습니다. (잘못된 입력 문자열 : "8"및 "8q"및 "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
nil
값을 리턴합니다 NSNumber*
. 공백과 흩어진 텍스트 문자로 인해 발생하는 문제를 재현 할 수 없습니다. IMO가 제대로 작동합니다. " 28.5 "
28.5로 구문 분석하고 "gibberish28.5"
, "28.5gibberish"
그리고 "gibberish28.5gibberish"
모두 파싱 할 수 있습니다; " 2 8 . 5. "
해석 할 수 없지만 이례적인 것은 아닙니다.
// 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];
숫자에서 문자열로 변환하는 경우 새 리터럴 구문 (XCode> = 4.4)을 사용하는 것이 좀 더 컴팩트합니다.
int myInt = (int)round( [@"1.6" floatValue] );
NSString* myString = [@(myInt) description];
( NSNumber 로 압축 하여 NSObjects의 description 메소드를 사용하여 문자열로 변환 )
텍스트 필드에 입력 한 텍스트를 정수로 변환
double mydouble=[_myTextfield.text doubleValue];
가장 가까운 더블로 반올림
mydouble=(round(mydouble));
가장 가까운 int로 반올림 (양수 값만 고려)
int myint=(int)(mydouble);
이중에서 문자열로 변환
myLabel.text=[NSString stringWithFormat:@"%f",mydouble];
또는
NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];
int에서 문자열로 변환
myLabel.text=[NSString stringWithFormat:@"%d",myint];
또는
NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];