- (void)setLabelWithMoney:(NSString *)money numberStyle:(NSNumberFormatterStyle)numberStyle decimalNumber:(NSString *)decimalNumber word:(NSString *)word
{
if (numberStyle == NSNumberFormatterDecimalStyle) {
NSString *moneyStr = [NSString stringWithFormat:@"%@",money];
if (decimalNumber == nil || [decimalNumber isEqualToString:@""]) {
}
else
{
for (int i = 0; i < money.length; i++) {
NSString *c = [money substringWithRange:NSMakeRange(i, 1)];
if ([c isEqualToString:@"."]) {
moneyStr = [moneyStr substringToIndex:(i + [decimalNumber intValue] + 1)];
}
}
}
double moneyNum = [moneyStr doubleValue];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init];
formatter.numberStyle = numberStyle;
money = [formatter stringFromNumber:[NSNumber numberWithDouble:moneyNum]];
if (word == nil || [word isEqualToString:@""]) {
self.text = money;
}
else
{
self.text = [NSString stringWithFormat:@"%@%@",money,word];
}
}
else if (numberStyle == NSNumberFormatterNoStyle)
{
NSString *moneyStr1 = [[NSString alloc]init];
NSString *moneyStr2 = [[NSString alloc]init];
if (decimalNumber == nil || [decimalNumber isEqualToString:@""]){
for (int i = 0; i < money.length; i++) {
NSString *c = [money substringWithRange:NSMakeRange(i, 1)];
if ([c isEqualToString:@"."]) {
moneyStr1 = [money substringToIndex:i];
moneyStr2 = [money substringFromIndex:i];
}
}
}
else
{
for (int i = 0; i < money.length; i++) {
NSString *c = [money substringWithRange:NSMakeRange(i, 1)];
if ([c isEqualToString:@"."]) {
moneyStr1 = [money substringToIndex:i];
moneyStr2 = [money substringWithRange:NSMakeRange(i, [decimalNumber intValue]+1)];
}
}
}
NSLog(@"%@ %@",moneyStr1,moneyStr2);
int moneyNum = [moneyStr1 intValue];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init];
formatter.numberStyle = numberStyle;
moneyStr1 = [formatter stringFromNumber:[NSNumber numberWithInt:moneyNum]];
if (word == nil || [word isEqualToString:@""]) {
self.text = [NSString stringWithFormat:@"%@%@",moneyStr1,moneyStr2];
}
else
{
self.text = [NSString stringWithFormat:@"%@%@",[NSString stringWithFormat:@"%@%@",moneyStr1,moneyStr2],word];
}
}
}
使用实例:
CustomNumberLabel *number = [[CustomNumberLabel alloc]initWithFrame:CGRectMake(0, 300, kScreenW, 20)];
[number setLabelWithMoney:@"123456789.123" numberStyle:(NSNumberFormatterNoStyle) decimalNumber:@"2" word:@"元"];;
[self.view addSubview:number];
其中 numberStyle就是NSNumberFormatter的numberStyle属性,一般只用no和decimal,下面有详细介绍。
decimalNumber是保留几位小数,word是加到后面的数字“元”?
通过NSNumberFormatter,可以设置NSNumber输出的格式。例如如下代码:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
NSString *string = [formatter stringFromNumber:[NSNumber numberWithInt:123456789]];
NSLog(@"Formatted number string:%@",string);
输出结果为:[1223:403] Formatted number string:123,456,789
其中NSNumberFormatter类有个属性numberStyle,它是一个枚举型,设置不同的值可以输出不同的数字格式。该枚举包括:
enum {
NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle,
NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle,
NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle,
NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle,
NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle,
NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle
y
NSNumberFormatterRoundCeiling = kCFNumberFormatterRoundCeiling,//四舍五入,原值2.7999999999,直接输出3
NSNumberFormatterRoundFloor = kCFNumberFormatterRoundFloor,//保留小数输出2.8 正是想要的
NSNumberFormatterRoundDown = kCFNumberFormatterRoundDown,//加上了人民币标志,原值输出¥2.8
NSNumberFormatterRoundUp = kCFNumberFormatterRoundUp,//本身数值乘以100后用百分号表示,输出280%
NSNumberFormatterRoundHalfEven = kCFNumberFormatterRoundHalfEven,//原值表示,输出2.799999999E0
NSNumberFormatterRoundHalfDown = kCFNumberFormatterRoundHalfDown,//原值的中文表示,输出二点七九九九。。。。
NSNumberFormatterRoundHalfUp = kCFNumberFormatterRoundHalfUp //原值中文表示,输出第三
};
typedef NSUInteger NSNumberFormatterStyle;
各个枚举对应输出数字格式的效果如下:
[1243:403] Formatted number string:123456789
[1243:403] Formatted number string:123,456,789
[1243:403] Formatted number string:¥123,456,789.00
[1243:403] Formatted number string:-539,222,988%
[1243:403] Formatted number string:1.23456789E8
[1243:403] Formatted number string:一亿二千三百四十五万六千七百八十九
其中第三项和最后一项的输出会根据系统设置的语言区域的不同而不同