Last active
February 3, 2018 03:19
-
-
Save edwardean/8598d04c27822135d10c20af4345130f to your computer and use it in GitHub Desktop.
formaterNumber
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) + "亿" | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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