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

可能重复:
在Objective-C中将小数转换为小数?

我试图做一个简单的应用程序将小数forms转换成分数forms。 十进制值被设置为一个UISlider的值,但是我应该如何得到分数forms的分数? 我应该用double还是float来声明它,我应该如何告诉应用程序以分数forms打印?

你想从实数返回一个分数的近似值? 例如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,UC Irvine的Calgorithm

你需要将小数转换成分数是GCD 。 例如:0.535

  1. 0.535 => 535/1000
  2. GCD(535,1000)=> 5
  3. (535/5)/(1000/5)=> 107/200。