一个浮点数值扩展,用于返回该值的有理数组成部分
/// Swift example
let rational = -9.90.rationalValue
// result.fraction, -9.90)
// result.description, "-9 9/10")
// result.whole, -9)
// result.numerator, 9)
// result.denominator, 10)
/// Objective-C example
id<RationalRepresentation> result = [DSFRational valueFor:-11.112];
assert([[result description] isEqual:@"-11 14/125"]);
assert([result whole] == -11);
assert([result numerator] == 14);
assert([result denominator] == 125);
assert([result fraction] == -11.112);
该算法源自 GameDev.net 用户 John Bolton 的一条评论。
以下是将一个值转换为最接近的分数(给定分母的最大值)的算法。它基于法雷序列。它可能比寻找最大公约数 (GCD) 快得多,并且结果更有用。例如,使用上面的建议,.333333 将被转换为 333333/1000000,这可能不是你想要的。使用这个算法,你将得到 1/3。