Iphone 将选择器上的分数格式化为最低公分母?
下面是我当前格式化选择器的方式。我真的希望它显示1/8而不是2/16或1/2而不是8/16。我如何调整它以显示我想要的输出?谢谢大家!Iphone 将选择器上的分数格式化为最低公分母?,iphone,ios,arrays,format,picker,Iphone,Ios,Arrays,Format,Picker,下面是我当前格式化选择器的方式。我真的希望它显示1/8而不是2/16或1/2而不是8/16。我如何调整它以显示我想要的输出?谢谢大家! fractionArray = [[NSMutableArray alloc] init]; for(int frac = 0; frac <= 15; frac ++){ NSString *fracString = [NSString stringWithFormat:@"%d/16", frac]; [fractionArray a
fractionArray = [[NSMutableArray alloc] init];
for(int frac = 0; frac <= 15; frac ++){
NSString *fracString = [NSString stringWithFormat:@"%d/16", frac];
[fractionArray addObject:fracString]; // Add the string.
分馏数组=[[NSMutableArray alloc]init];
对于(int-frac=0;frac这应适用于2分母的任何幂:
// dodge this special case:
[fractionArray addObject:@"0"];
for ( int numerator = 1; numerator <= 15; numerator++ )
{
int denominator = 16;
int num = numerator;
while ( num % 2 == 0 )
{
num /= 2;
denominator /= 2;
}
NSString *fracString = [NSString stringWithFormat:@"%d/%d", num, denominator];
[fractionArray addObject:fracString]; // Add the string.
}
int denominator = 240;
for ( int numerator = 1; numerator < denominator; numerator++ )
{
int denom = denominator;
int num = numerator;
int factor = 2;
while ( factor * factor < denom )
{
while ( (num % factor) == 0 && (denom % factor) == 0 )
{
num /= factor;
denom /= factor;
}
// don't worry about finding the next prime,
// the loop above will skip composites
++factor;
}
NSString *fracString = [NSString stringWithFormat:@"%d/%d", num, denom];
[fractionArray addObject:fracString];
}
//避开这种特殊情况:
[分馏阵列添加对象:@“0”];
对于(int分子=1;分子这应该适用于2分母的任何幂:
// dodge this special case:
[fractionArray addObject:@"0"];
for ( int numerator = 1; numerator <= 15; numerator++ )
{
int denominator = 16;
int num = numerator;
while ( num % 2 == 0 )
{
num /= 2;
denominator /= 2;
}
NSString *fracString = [NSString stringWithFormat:@"%d/%d", num, denominator];
[fractionArray addObject:fracString]; // Add the string.
}
int denominator = 240;
for ( int numerator = 1; numerator < denominator; numerator++ )
{
int denom = denominator;
int num = numerator;
int factor = 2;
while ( factor * factor < denom )
{
while ( (num % factor) == 0 && (denom % factor) == 0 )
{
num /= factor;
denom /= factor;
}
// don't worry about finding the next prime,
// the loop above will skip composites
++factor;
}
NSString *fracString = [NSString stringWithFormat:@"%d/%d", num, denom];
[fractionArray addObject:fracString];
}
//避开这种特殊情况:
[分馏阵列添加对象:@“0”];
对于(int-numerator=1;numerator这些天的孩子们……他们在学校里教什么……咕哝咕哝
int gcd(int a, int b) {
// assumes a >= 0 && b > 0
while (b != 0) {
int t = a % b;
a = b;
b = t;
}
return a;
}
NSString *stringByReducingFraction(int a, int b) {
if (a == 0) return @"0";
if (a == b) return @"1";
int g = gcd(a, b);
return [NSString stringWithFormat:@"%d/%d", a / g, b / g];
}
现在的孩子们…他们在学校教什么…抱怨
int gcd(int a, int b) {
// assumes a >= 0 && b > 0
while (b != 0) {
int t = a % b;
a = b;
b = t;
}
return a;
}
NSString *stringByReducingFraction(int a, int b) {
if (a == 0) return @"0";
if (a == b) return @"1";
int g = gcd(a, b);
return [NSString stringWithFormat:@"%d/%d", a / g, b / g];
}
可能的重复项。请参阅第二个答案。这是转换小数,而不是分数…?您可以通过使用-componentsSeparatedByString:
获取两个必要的参数来轻松解决问题。不要轻易低估第二个答案的值。如果您能够在该页上提供一个示例,我将很高兴地结束这篇文章。我显然没有你那么先进。我通过看代码来学习,然后理解它是如何工作的。可能的重复。请看第二个答案。那就是转换小数,而不是小数…?通过使用-componentsSeparatedByString:
,获得两个必要的参数,你可以很容易地进入解决方案。不要忽视这个问题第二个答案的价值如此简单。如果你能在那页上提供一个例子,我将很高兴地结束这篇文章。我显然没有你那么先进。我通过看代码来学习,然后理解它是如何工作的。NSString*fracString=[NSString stringWithFormat:@“%d/%d”,分子,分母];是的,愚蠢的好吧:如果我们把分子除以2,它会搞糟循环。我会编辑答案。:@davehayden最上面的代码有效,但它显示为“0,1/16,1/8,3/16,1/4,5/16,3/8,7/16,1/2,9/16,5/8,11/16,3/4,13/16,7/8,15/16,1/16,0等等,然后在15/16之后显示2/16。所以在每一英寸之后,在15/16之后它继续运行3/16,4/16等等。所以我想我不想要一个循环,因为它只需要运行一次…?不,罗布·马约夫得到了正确的答案:只要找到GCD(分子和分母的最大公约数),然后将它们都除以该数字。更快、更干净、更全面!在NSString*fracString=[NSString stringWithFormat:@“%d/%d”,分子、分母]上崩溃;是的,boneheaded好吧:如果我们将分子除以2,就会搞糟循环。我将编辑答案。:)@davehayden顶层代码可以工作,但它显示为“0,1/16,1/8,3/16,1/4,5/16,3/8,7/16,1/2,9/16,5/8,11/16,3/4,13/16,7/8,15/16,1/16,0等等,然后在15/16之后显示2/16。所以在每一英寸之后,在15/16之后它继续运行3/16,4/16等等。所以我想我不想要一个循环,因为它只需要运行一次…?不,罗布·马约夫得到了正确的答案:只要找到GCD(分子和分母的最大公约数),然后将它们都除以该数字。更快、更干净、更全面!哈!当然!我不记得这一点的借口是我从来没有在任何事情上使用gcd()。另一方面,gcd非常有用。:)这段代码到处都是错误,我不知道从哪里开始修复它。我发布的代码中没有错误。我已经在上放了一个完整的工作示例及其输出。好的,那么我该如何将其应用到我上面的代码中呢?因为在你的代码中,我收到了7个警告和7个错误。我甚至不知道从哪里开始修复它们。我正在将我上面的代码放入viewDidLoad,这是我的问题吗?哈!当然!我不记得这一点的借口是我从来没有在任何事情上使用gcd()。另一方面,gcd非常有用。:)这段代码到处都是错误,我不知道从哪里开始修复它。我发布的代码中没有错误。我已经在上放了一个完整的工作示例及其输出。好的,那么我该如何将其应用到我上面的代码中呢?因为在你的代码中,我收到了7个警告和7个错误。我甚至不知道从哪里开始修复它们。我正在将我上面的代码放入viewDidLoad,这是我的问题吗?