iPhone应用程序中的十进制到分数转换

时间:2012-11-17 10:52:02

标签: objective-c ios

  

可能重复:
  Convert decimal to fraction in Objective-C?

我正在尝试制作一个简单的应用程序,用于将小数形式转换为小数形式。十进制值设置为UISlider的值,但我应该如何获得分数形式的分数?我应该用double或float声明它,我应该如何告诉应用程序以分数形式打印出来?

2 个答案:

答案 0 :(得分: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打印到控制台。

David Eppstein,加州大学欧文分校致algorithm in C

答案 1 :(得分:0)

将小数转换为小数所需的是GCD。例如: 0.535

  1. 0.535 =&gt; 1000分之535
  2. GCD(535,1000)=&gt; 5
  3. (535/5)/(1000/5)=&gt;二百分之一百〇七。