原始版本未優化, 需要的請自行進行額外判斷.
extension Double {
func transeformToString() -> String {
let MAXIMUM_NUMBER = 99999999999.99
let CN_ZERO = "零"
let CN_ONE = "壹"
let CN_TWO = "貳";
let CN_THREE = "叄";
let CN_FOUR = "肆";
let CN_FIVE = "伍";
let CN_SIX = "陸";
let CN_SEVEN = "柒";
let CN_EIGHT = "捌";
let CN_NINE = "玖";
let CN_TEN = "拾";
let CN_HUNDRED = "佰";
let CN_THOUSAND = "仟";
let CN_TEN_THOUSAND = "萬";
let CN_HUNDRED_MILLION = "億";
let CN_SYMBOL = "人民幣";
let CN_DOLLAR = "元";
let CN_TEN_CENT = "角";
let CN_CENT = "分";
let CN_INTEGER = "整";
var outputCharacters = ""
var integral = ""
var decimal = ""
var digits = [CN_ZERO, CN_ONE, CN_TWO, CN_THREE, CN_FOUR, CN_FIVE, CN_SIX, CN_SEVEN, CN_EIGHT, CN_NINE]
var radices = ["", CN_TEN, CN_HUNDRED, CN_THOUSAND]
var bigRadices = ["", CN_TEN_THOUSAND, CN_HUNDRED_MILLION]
var decimals = [CN_TEN_CENT, CN_CENT]
var p = 0
var d = ""
var quotient = 0
var modulus = 0
var currencyDigitsText = "\(self)"
if currencyDigitsText.count == 0 {
UIAlertView.init(title: "金額不能為空", message: nil, delegate: nil, cancelButtonTitle: "好的").show()
return ""
}
currencyDigitsText = currencyDigitsText.replacingOccurrences(of: ",", with: "")
if Double(currencyDigitsText)! > MAXIMUM_NUMBER {
UIAlertView.init(title: "金額過大", message: nil, delegate: nil, cancelButtonTitle: "好的").show()
return ""
}
let parts = currencyDigitsText.components(separatedBy: ".")
if parts.count > 1 {
integral = parts.first!
decimal = parts.last!
decimal = String.init(decimal.characters.prefix(2))
} else {
integral = parts.first!
decimal = ""
}
if Double(integral)! > 0 {
var zeroCount = 0
let cs = integral.characters
for (i, item) in cs.enumerated() {
p = integral.count - i - 1
d = String.init(item)
print((p, d))
quotient = Int(p / 4)
modulus = p % 4
if d == "0" {
zeroCount += 1
} else {
if zeroCount > 0 {
outputCharacters += digits.first!
}
zeroCount = 0
outputCharacters += digits[Int(d)!] + radices[modulus]
}
if modulus == 0 && zeroCount < 4 {
outputCharacters += bigRadices[quotient]
zeroCount = 0
}
}
outputCharacters += CN_DOLLAR
}
if decimal.count != 0 {
for (i, item) in decimal.characters.enumerated() {
d = String.init(item)
if d != "0" {
outputCharacters += digits[Int(d)!] + decimals[i]
}
}
}
if outputCharacters == "" {
outputCharacters = CN_ZERO + CN_DOLLAR
}
if decimal == "" {
outputCharacters += CN_INTEGER
}
outputCharacters = CN_SYMBOL + outputCharacters
return outputCharacters
}
}
123456567.1.transeformToString()
複製程式碼