分数格式化器 (FractionFormatter)

Swift Version Compatibility Badge Platform Compatibility Badge

Apple 的 NumberFormatter 的一个子类,它输出美观打印的 Unicode 分数,而不是十进制数。

将 FractionFormatter 添加到您的项目

在 Xcode 中,使用 File:Swift Packages:Add Package Dependency… 菜单命令,然后输入 https://gitlab.com/davidwkeith/fractionformatter.git

用法

FractionFormatterNumberFormatter 的直接替代品,并且以相同的方式使用

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 上镜像。 如果您发现问题或有功能请求,可以在此处提交。

已知问题

Radar FB7644708 - 复数化和数字格式化

当与 Apple 的 MeasurementFormatter 结合使用时,存在复数化问题。 例如,使用 NumberFormatter 格式化分数英尺,它将输出 "0.5 feet",读作 "zero point five feet",但如果替换为 FractionFormatter,则输出为 "½ feet",这在英语中通常不是这样写的。 通常我们说 "half a foot",或者更正式地说 "one half of a foot",因此写成单数形式。

解决方法是从测量值中提取符号,并在测量值介于 -1 和 1 之间时替换为复数符号。