Skip to content

Instantly share code, notes, and snippets.

@edwardean
Last active February 3, 2018 03:19
Show Gist options
  • Save edwardean/8598d04c27822135d10c20af4345130f to your computer and use it in GitHub Desktop.
Save edwardean/8598d04c27822135d10c20af4345130f to your computer and use it in GitHub Desktop.
formaterNumber
static func formaterNumber(_ number: Double) -> String {
if number < 1e4 {
return "\(number)"
}
if number >= 1e4 && number < 1e5 {
return String(format: "%.1f", number / 1e4) + "万"
}
if number >= 1e5 && number < 1e6 {
return String(format: "%.1f", number / 1e5) + "十万"
}
if number >= 1e6 && number < 1e7 {
return String(format: "%.1f", number / 1e6) + "百万"
}
if number >= 1e7 && number < 1e8 {
return String(format: "%.1f", number / 1e7) + "千万"
}
return String(format: "%.1f", number / 1e8) + "亿"
}
typealias NumberContext = (unit: Double, descriptor: String)
let numberContexts: [NumberContext] = {
[
NumberContext(1e4, "万"),
NumberContext(1e5, "十万"),
NumberContext(1e6, "百万"),
NumberContext(1e7, "千万"),
NumberContext(1e8, "亿"),
NumberContext(1e9, "十亿"),
]
}()
let numberFormatter: NumberFormatter = {
let formatter = NumberFormatter().then {
$0.maximumFractionDigits = 1
}
return formatter
}()
func formatNumber(_ number: Double, descriptor: String = "") -> String {
guard let pureString = numberFormatter.string(from: NSNumber(value: number)) else {
return "\(number)" + descriptor
}
return pureString + descriptor
}
func formaterNumber(_ number: Double) -> String {
var prevContext = numberContexts[0]
for (index, numberContext) in numberContexts.enumerated() {
if index == 0 {
if number < numberContext.unit {
return formatNumber(number)
}
} else {
if number >= prevContext.unit && number < numberContext.unit {
return formatNumber(number / prevContext.unit, descriptor: prevContext.descriptor)
}
}
prevContext = numberContext
}
return formatNumber(number / prevContext.unit, descriptor: prevContext.descriptor)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment