度数值的 NSNumberFormatter

NSNumberFormatter for degrees' values

0°00'00.00" 格式是否有适当的实现? NSNumberFormatter 仅支持 groupingSeparatordecimalSeparator。 还是不行?

Foundation 中没有度-分-秒格式器,但自己动手并不难。这是我粗略的尝试:

class DegreeFormatter : NumberFormatter {
    func string(from degree: Double) -> String {
        var remaining = degree

        let degree = remaining.rounded(.towardZero)
        remaining -= degree
        remaining *= 60.0

        let minute = remaining.rounded(.towardZero)
        remaining -= minute
        remaining *= 60

        let seconds = remaining

        return "\(Int(degree))°\(Int(minute))'\(self.string(from: seconds as NSNumber)!)"
    }
}

let formatter = DegreeFormatter()
formatter.maximumFractionDigits = 2

print(formatter.string(from: 1.23456789)) // 1°14'4.44

您可以进一步自定义它以包括自定义度数符号、是否包括秒、允许的单位等。