find一个浮点数的分子的分子,给出一个具体的分母
可能重复:
如何将浮动转换为可读的分数?
在Objective-C中将小数转换为小数?
我想取一个小数, 5.50
,这是一个variables,并且只将小数部分除以0.0625
,这是我的准确点。 这将给我8
,如8/16
或1/2
。
然后,我想在文本字段中显示该答案为5 8/16
或1/2
。 我知道一些答案会返回一个十进制数,而不是一个整数,除以.0625
,但我会围绕这个答案,这仍然会给我最接近的十六。 什么是最好的方法来做到这一点? 我想做一个function,所以我可以重用它。 是的,我发布了一个类似的问题,但是没能解决问题。 我想有一个更好,更简单的方法来做到这一点,所以我已经发布了这个。 提前致谢。
function:
- (NSString *)theFunction:(float)input { NSArray * array = [NSarray initWithObjects:nil,nil@"1/8",nil,@"1/4",] int fractions = lroundf((input - (int)input)/((float)1/(float)16)); if(fractions == 0 || fractions == 16) { return [NSString stringWithFormat:@"%d",lroundf(input)]; } else { return [NSString stringWithFormat:@"%d %d/16",(int)input,fractions]; } }
注意:
if
语句将5 0/16
转换为5
和5 16/16
转换为6
。
如果您更喜欢5 0/16
和5 16/16
表示法,请将if
语句replace为:
return [NSString stringWithFormat:@"%d %d/16",(int)input,fractions];
编辑:( 贾森)
//Just to make it a little sweeter! - (NSString *)theFunction:(float)input { int fractions = lroundf((input - (int)input)/((float)1/(float)16)); if(fractions == 0 || fractions == 16) { return [NSString stringWithFormat:@"%d",lroundf(input)]; } else if(fractions == 2) { return [NSString stringWithFormat:@"%d 1/8",(int)input]; } else if(fractions == 4) { return [NSString stringWithFormat:@"%d 1/4",(int)input]; } else if(fractions == 6) { return [NSString stringWithFormat:@"%d 3/8",(int)input]; } else if(fractions == 8) { return [NSString stringWithFormat:@"%d 1/2",(int)input]; } else if(fractions == 10) { return [NSString stringWithFormat:@"%d 5/8",(int)input]; } else if(fractions == 12) { return [NSString stringWithFormat:@"%d 3/4",(int)input]; } else if(fractions == 14) { return [NSString stringWithFormat:@"%d 7/8",(int)input]; } else { return [NSString stringWithFormat:@"%d %d/16",(int)input,fractions]; } }
编辑 (由杰森编辑的回应)
我优化了你的代码,这样它就更干净了。
另外检查下面的代码,我认为使用数组效率更高。
- (NSString *)theFunction:(float)input { NSArray * array = [[NSArray alloc] initWithObjects: @"",@"",@"1/8",@"",@"1/4",@"",@"3/8",@"",@"1/2",@"",@"5/8",@"",@"3/4",@"",@"3/4",@"",@"7/8",@"",nil]; int fractions = lroundf((input - (int)input)/((float)1/(float)16)); if(fractions == 0 || fractions == 16) { return [NSString stringWithFormat:@"%d",lroundf(input)]; } else { if([[array objectAtIndex:fractions] isEqualToString:@""]) { return [NSString stringWithFormat:@"%d %d/16",(int)input,fractions]; } else { return [NSString stringWithFormat:@"%d %@",(int)input,[array objectAtIndex:fractions]]; } } }
我认为你的问题比连接的一个@Caleb简单得多。
除以0.0625得到十六分之一。 将结果四舍五入为最接近的整数i
。 使用整数除法i / 16
来获得整个单元的数量,并使用模运算符j = i % 16
来得到小数单位。 为了减less分数,可以使用j
作为提前创build的数组的索引{ "", "1/16", "1/8", "3/16", ... }
。
你也可以用16除以16来得到模16的运算符,但是这会使得代码更难读,没有多大的好处。