2013-02-25 2 views
1

iOS에서 부동 소수점 이후 자릿수를 어떻게 계산합니까?iOS에서 부동 소수점 이후 자릿수를 계산하는 방법은 무엇입니까?

예를 들어

:

  • 3.105 0
  • 2.2 반환해야합니다 3
  • 3.0 반환해야합니다 반환해야 1

업데이트 : 는 또한 우리는 다음 예제를 추가해야 . 분수 부분의 자릿수를 알고 싶습니다.

NSString *priorityString = [[NSNumber numberWithFloat:self.priority] stringValue]; 
    NSRange range = [priorityString rangeOfString:@"."]; 
    int digits; 
    if (range.location != NSNotFound) { 
     priorityString = [priorityString substringFromIndex:range.location + 1]; 
     digits = [priorityString length]; 
    } else { 
     range = [priorityString rangeOfString:@"e-"]; 
     if (range.location != NSNotFound) { 
      priorityString = [priorityString substringFromIndex:range.location + 2]; 
      digits = [priorityString intValue]; 
     } else { 
      digits = 0; 
     } 
    } 
+0

NSString에 캐스트 한 다음 도트 위치를 찾으 시나요? – iiFreeman

+7

@iiFreeman 모든 로케일이 소수점으로 도트를 사용하는 것은 아닙니다 –

+1

3.105 또는 2.2를 iOS에서 'float'또는 'double'값으로 사용할 수 없습니다 (표준 Apple 도구 사용). 이진 부동 소수점으로 표현할 수 없습니다. 다른 형식의 값을 가지고 있습니까? 그렇지 않은 경우이 값 근처에서 숫자를 전달하고 있습니까? 예 : 2.2 대신 2.20000000000000017763568394002504646778106689453125? 그런 다음 이것을 2.20000000000000017763568394002504646778106689453125가 아닌 2.2로 처리할지 결정하기 위해 어떤 기준을 사용해야합니까? –

답변

5

이 방법을 시도 반환해야 32 비트 아키텍처 앱에서 64 비트 아키텍처로 변환 할 때, 내가 찾은 다른 많은 방법들 t 정밀도 및 엉망으로 물건. 그래서 여기 어떻게합니까 :

bool didHitDot = false;  
int numDecimals = 0; 
NSString *doubleAsString = [doubleNumber stringValue]; 

for (NSInteger charIdx=0; charIdx < doubleAsString.length; charIdx++){ 

    if ([doubleAsString characterAtIndex:charIdx] == '.'){ 
     didHitDot = true; 
    } 

    if (didHitDot){ 
     numDecimals++; 
    } 
} 

//numDecimals now has the right value 
+0

처음부터 0 초를 잘라야합니다. 부동 소수점에는 항상 8 자릿수 (IIRC)의 10 진수가 표시됩니다. 3.00000000은 8을 반환합니다. 그리고 데이비드가 언급 한대로 로케일을 기반으로 십진수에 맞는 구분 기호를 찾아야합니다. – Fogmeister

+0

@ Fogmeister : 당신 말이 맞습니다. 나는 문제의 예제에 따라 해결했습니다. –

0

어쩌면 더 우아한 방법이 : 내가 사용하는 어떤

NSString *[email protected]"99.1234"; 

NSArray *array=[enteredValue componentsSeparatedByString:@"."]; 
NSLog(@"->Count : %ld",[array[1] length]); 
관련 문제