資料庫讀取的數值為 1, 2, 3...,需在 Label 顯示為 一, 二, 三... 或 one, two, three...。
// 簡體/繁體通用
NSArray *chineseDigits = @[@"零", @"一", @"二", @"三", @"四", @"五", @"六", @"七", @"八", @"九"];
NSArray *chineseUnits = @[@"", @"十", @"百", @"千", @"萬", @"億"];
// 簡易轉換(0-9999)
- (NSString *)numberToChinese:(NSInteger)num {
if (num == 0) return chineseDigits[0];
NSMutableString *result = [NSMutableString string];
NSInteger unitIndex = 0;
while (num > 0) {
NSInteger digit = num % 10;
if (digit != 0) {
[result insertString:chineseDigits[digit] atIndex:0];
[result insertString:chineseUnits[unitIndex] atIndex:0];
} else if (result.length > 0 && ![[result substringToIndex:1] isEqualToString:chineseDigits[0]]) {
[result insertString:chineseDigits[0] atIndex:0]; // 中間補零
}
num /= 10;
unitIndex++;
}
// 處理「一十」→「十」
if ([result hasPrefix:@"一十"]) [result deleteCharactersInRange:NSMakeRange(0, 1)];
return result;
}
NSArray *englishWords = @[
@"zero", @"one", @"two", @"three", @"four", @"five", @"six", @"seven", @"eight", @"nine",
@"ten", @"eleven", @"twelve", @"thirteen", @"fourteen", @"fifteen", @"sixteen", @"seventeen", @"eighteen", @"nineteen",
@"twenty", @"thirty", @"forty", @"fifty", @"sixty", @"seventy", @"eighty", @"ninety"
];
- (NSString *)numberToEnglish:(NSInteger)num {
if (num < 20) return englishWords[num];
if (num < 100) {
NSInteger tens = num / 10;
NSInteger ones = num % 10;
NSString *tensWord = englishWords[18 + tens]; // twenty 起始索引 18
return ones == 0 ? tensWord : [NSString stringWithFormat:@"%@-%@", tensWord, englishWords[ones]];
}
return @""; // 超出範圍自行擴充
}
let chineseMap: [Int: String] = [
0: "零", 1: "一", 2: "二", 3: "三", 4: "四",
5: "五", 6: "六", 7: "七", 8: "八", 9: "九"
]
func toChinese(_ num: Int) -> String {
guard num != 0 else { return chineseMap[0]! }
var n = num, result = "", unit = 0
let units = ["", "十", "百", "千", "萬", "億"]
while n > 0 {
let d = n % 10
if d != 0 {
result = "\(chineseMap[d]!)\(units[unit])\(result)"
} else if !result.isEmpty && !result.hasPrefix("零") {
result = "零\(result)"
}
n /= 10; unit += 1
}
return result.replacingOccurrences(of: "^一十", with: "十", options: .regularExpression)
}
NSInteger dbValue = 25;
label.text = [self numberToChinese:dbValue]; // "二十五"
label.text = [self numberToEnglish:dbValue]; // "twenty-five"
.strings 檔案,支援多語言切換。「查表法」是數字轉文字最高效、最易維護的模式,避免複雜遞迴或條件判斷。