1.用NSNumberFormatter
關于NSNumberFormatter,請看這里http://www.reibang.com/p/817029422a72
我們這里只說數(shù)字轉漢字的實現(xiàn):
NSNumberFormatter的numberStyle如下:
/*
double testNum = 3.7999;
typedef CF_ENUM(CFIndex, CFNumberFormatterRoundingMode) {
kCFNumberFormatterRoundCeiling = 0, //四舍五入,直接輸出4
kCFNumberFormatterRoundFloor = 1 , //保留小數(shù)輸出3.8
kCFNumberFormatterRoundDown = 2, //加上了人民幣標志,原值輸出¥3.8
kCFNumberFormatterRoundUp = 3, //本身數(shù)值乘以100后用百分號表示,輸出380%
kCFNumberFormatterRoundHalfEven = 4,//輸出3.799999999E0
kCFNumberFormatterRoundHalfDown = 5,//原值的中文表示,輸出三點七九九九赴涵。刨肃。贸典。事示。
kCFNumberFormatterRoundHalfUp = 6//原值中文序數(shù)表示,輸出第四
typedef NS_ENUM(NSUInteger, NSNumberFormatterStyle) {
NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle,
NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle,
NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle,
NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle,
NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle,
NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle,
NSNumberFormatterOrdinalStyle NS_ENUM_AVAILABLE(10_11, 9_0) = kCFNumberFormatterOrdinalStyle,
NSNumberFormatterCurrencyISOCodeStyle NS_ENUM_AVAILABLE(10_11, 9_0) = kCFNumberFormatterCurrencyISOCodeStyle,
NSNumberFormatterCurrencyPluralStyle NS_ENUM_AVAILABLE(10_11, 9_0) = kCFNumberFormatterCurrencyPluralStyle,
NSNumberFormatterCurrencyAccountingStyle NS_ENUM_AVAILABLE(10_11, 9_0) = kCFNumberFormatterCurrencyAccountingStyle,
};
*/
從上可以看出kCFNumberFormatterRoundHalfDown是輸出中文的黍判,代碼如下
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = kCFNumberFormatterRoundHalfDown;
NSString *ch_string = [formatter stringFromNumber:[NSNumber numberWithInt:6]];
輸出則是六训措,但在實際情況下,如果我們手機當前語言不是中文瑞信,輸出則不一定是六厉颤,如英文時是six。若要要求輸出一定是中文凡简,則再加以下代碼走芋,指定輸出語言(別的語言同理):
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_Hans"];
formatter.locale = locale;
2.用算法實現(xiàn)
/**
* 將阿拉伯數(shù)字轉換為中文數(shù)字
*/
-(NSString *)translationArabicNum:(NSInteger)arabicNum
{
NSString *arabicNumStr = [NSString stringWithFormat:@"%ld",(long)arabicNum];
NSArray *arabicNumeralsArray = @[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"0"];
NSArray *chineseNumeralsArray = @[@"一",@"二",@"三",@"四",@"五",@"六",@"七",@"八",@"九",@"零"];
NSArray *digits = @[@"個",@"十",@"百",@"千",@"萬",@"十",@"百",@"千",@"億",@"十",@"百",@"千",@"兆"];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:chineseNumeralsArray forKeys:arabicNumeralsArray];
if (arabicNum < 20 && arabicNum > 9) {
if (arabicNum == 10) {
return @"十";
}else{
NSString *subStr1 = [arabicNumStr substringWithRange:NSMakeRange(1, 1)];
NSString *a1 = [dictionary objectForKey:subStr1];
NSString *chinese1 = [NSString stringWithFormat:@"十%@",a1];
return chinese1;
}
}else{
NSMutableArray *sums = [NSMutableArray array];
for (int i = 0; i < arabicNumStr.length; i ++)
{
NSString *substr = [arabicNumStr substringWithRange:NSMakeRange(i, 1)];
NSString *a = [dictionary objectForKey:substr];
NSString *b = digits[arabicNumStr.length -i-1];
NSString *sum = [a stringByAppendingString:b];
if ([a isEqualToString:chineseNumeralsArray[9]])
{
if([b isEqualToString:digits[4]] || [b isEqualToString:digits[8]])
{
sum = b;
if ([[sums lastObject] isEqualToString:chineseNumeralsArray[9]])
{
[sums removeLastObject];
}
}else
{
sum = chineseNumeralsArray[9];
}
if ([[sums lastObject] isEqualToString:sum])
{
continue;
}
}
[sums addObject:sum];
}
NSString *sumStr = [sums componentsJoinedByString:@""];
NSString *chinese = [sumStr substringToIndex:sumStr.length-1];
return chinese;
}
}