진수

2012-11-17 6 views
0

가능한 중복 : 나는 분수 형태로 소수점 형식을 변환하는 간단한 응용 프로그램을 만들려고 노력하고있어
Convert decimal to fraction in Objective-C?진수

. 십진수 값은 UISlider의 값으로 설정되지만 분수 형태로 분수를 얻는 방법은 무엇입니까? double 또는 float로 선언해야하며 앱에 분수 형태로 출력하도록 앱에 지시해야합니까?

답변

0

실수에서 소수점 근사값을 반환 하시겠습니까? 예 : 0.3333 ~ "1/3". 이 실험을 시도 할 수 : 콘솔에

#import <Foundation/Foundation.h> 

char out[20]; 

static char *fractApprox(double r, long d) { 
    double atof(); 
    int atoi(); 
    void exit(); 

    long m[2][2]; 
    double x, startx; 
    long maxden; 
    long ai; 

    startx = x = r; 
    maxden = d; 

    /* initialize matrix */ 
    m[0][0] = m[1][1] = 1; 
    m[0][1] = m[1][0] = 0; 

    /* loop finding terms until denom gets too big */ 
    while (m[1][0] * (ai = (long)x) + m[1][1] <= maxden) { 
     long t; 
     t = m[0][0] * ai + m[0][1]; 
     m[0][1] = m[0][0]; 
     m[0][0] = t; 
     t = m[1][0] * ai + m[1][1]; 
     m[1][1] = m[1][0]; 
     m[1][0] = t; 
     if(x==(double)ai) break;  // AF: division by zero 
     x = 1/(x - (double) ai); 
     if(x>(double)0x7FFFFFFF) break; // AF: representation failure 
    } 

    ai = (maxden - m[1][1])/m[1][0]; 
    m[0][0] = m[0][0] * ai + m[0][1]; 
    m[1][0] = m[1][0] * ai + m[1][1]; 

    sprintf(out, "%ld/%ld",m[0][0],m[1][0]); 
    return out; 
} 

int main(int argc, const char * argv[]) 
{ 

    @autoreleasepool { 
     printf("%s",fractApprox(0.342343, 999)); 
    } 
    return 0; 
} 

인쇄를 329/961. 당신은 분수를 소수로 변환 할 필요가 무엇 algorithm in C

0

에 대한 데이빗 엡스타인, UC 어바인에

크레딧 GCD입니다. 예를 들어 0.535

  1. 0.535 => 1,000분의 535
  2. GCD (535, 1000) => 5
  3. (5분의 535)/(5분의 1,000)를 => 200분의 107.