Objective-C/Swift 有理数类

一个浮点数值扩展,用于返回该值的有理数组成部分

CocoaPods Swift Package Manager

/// 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。

点击此处查看原始帖子