Apple 的 NumberFormatter
的一个子类,它输出美观打印的 Unicode 分数,而不是十进制数。
在 Xcode 中,使用 File:Swift Packages:Add Package Dependency…
菜单命令,然后输入 https://gitlab.com/davidwkeith/fractionformatter.git
FractionFormatter
是 NumberFormatter
的直接替代品,并且以相同的方式使用
let fractionFormatter = FractionFormatter()
fractionFormatter.string(from: NSNumber(value: 0.5)) // "½"
fractionFormatter.string(from: NSNumber(value: 0.123)) // "¹²³⁄₁₀₀₀"
当然,有一些方便的方法可以更轻松地处理包含分数的字符串
fractionFormatter.double(from: "1 ½") // 1.5
fractionFormatter.double(from: "1 1/2") // 1.5
fractionFormatter.string(from: "1 1/2") // "1 ½"
fractionFormatter.string(from: "1 ½", as: .BuiltUp) // 1 1/2
源代码托管在 GitLab 上,并在 GitHub 上镜像。 如果您发现问题或有功能请求,可以在此处提交。
当与 Apple 的 MeasurementFormatter 结合使用时,存在复数化问题。 例如,使用 NumberFormatter
格式化分数英尺,它将输出 "0.5 feet",读作 "zero point five feet",但如果替换为 FractionFormatter
,则输出为 "½ feet",这在英语中通常不是这样写的。 通常我们说 "half a foot",或者更正式地说 "one half of a foot",因此写成单数形式。
解决方法是从测量值中提取符号,并在测量值介于 -1 和 1 之间时替换为复数符号。