2014-11-17 4 views
1

각각을 문자열로 바꿀 수 있도록 왼쪽 및 오른쪽 숫자를 부동에서 분리하려고합니다. 예를 들어, 5.11 인 경우 을 문자열로, 을 다른 문자열로 변환 할 수 있어야합니다.Objective-C : 십진수의 오른쪽/왼쪽 숫자 분리

이에서
// from float: 5.11 
NSString * leftNumber = @"5"; 
NSString * rightNumber = @"11"; 

, 나는 5 '(11)에 5.11을 설정할 수 있습니다 "

+0

같은 수치 포매터를 사용할 수 있습니다 피트/인치에 "맵핑"하지 말고 오히려 (2 자리수로) 피트와 백분율로 매핑하십시오. 그리고 값이 유효 피트/인치이라 할지라도 플로트로 읽은 다음 다시 작성하면 조심하지 않으면 반올림 오류가 발생할 수 있습니다. –

+0

10 진수가 높이 측정에 매핑되지 않는다는 것을 알고 있습니다. 감사합니다. – WrightsCS

+0

반올림 문제를 이해하고 있습니까? –

답변

2

한 가지 방법 :.

  1. 사용 stringWithFormat 문자열로 변환합니다."5.11 "
  2. componentsSeparatedByString을 사용하여 "5"와 "11"배열로 분리하십시오.
  3. Combin e와 stringWithFormat.
2

당신은 그것을 위해 NSString stringWithFormat 수학 기능을 사용할 수 있습니다 0.11 피트 하지 십일인치 때문에

float n = 5.11; 
NSString * leftNumber = [NSString stringWithFormat:@"%0.0f", truncf(n)]; 
NSString * rightNumber = [[NSString stringWithFormat:@"%0.2f", fmodf(n, 1.0)] substringFromIndex:2]; 
NSLog(@"'%@' '%@'", leftNumber, rightNumber); 

그러나,이, 특히 관습 단위의 길이를 나타 내기 위해, 적합하지 않습니다. 길이를 정수 (예 : 1/16-inch)를 지원하는 가장 작은 단위로 표시하는 것이 더 나을 것입니다. 그런 다음이를 표시 목적으로 실제 길이로 변환하는 것이 좋습니다. 이 표현에서의 5피트 (11)는 것이다 5 * 12 * 16 + 11 * 16 = 1136

1

당신은 소수가하는 것을 물론 알다시피 같은

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
formatter.numberStyle = NSNumberFormatterDecimalStyle; 
formatter.decimalSeparator = @"'"; 
formatter.positiveSuffix = @"\""; 
formatter.alwaysShowsDecimalSeparator = true; 
NSString *numberString = [formatter stringFromNumber:@(5.11)]; 

// Output : 5'11"