// // MastodonMetricFormatter.swift // Mastodon // // Created by MainasuK Cirno on 2021-4-2. // import Foundation public final class MastodonMetricFormatter: Formatter { public func string(from number: Int) -> String? { let isPositive = number >= 0 let symbol = isPositive ? "" : "-" let numberFormatter = NumberFormatter() let value = abs(number) let metric: String switch value { case 0..<1000: // 0 ~ 1K metric = String(value) case 1000..<10000: // 1K ~ 10K numberFormatter.maximumFractionDigits = 1 let string = numberFormatter.string(from: NSNumber(value: Double(value) / 1000.0)) ?? String(value / 1000) metric = string + "K" case 10000..<1000000: // 10K ~ 1M numberFormatter.maximumFractionDigits = 0 let string = numberFormatter.string(from: NSNumber(value: Double(value) / 1000.0)) ?? String(value / 1000) metric = string + "K" default: numberFormatter.maximumFractionDigits = 0 let string = numberFormatter.string(from: NSNumber(value: Double(value) / 1000000.0)) ?? String(value / 1000000) metric = string + "M" } return symbol + metric } }