Five numeric types in objective-C (nsnumber and nsnumberformatter)

Source: Internet
Author: User

// 聊聊NSNumber, NSNumber可以封装c中基本数据类型 char,int,long,float,BOOL,NSInteger,CGFloat等。    NSNumber *num = [NSNumber numberWithChar:'a'];    NSLog(@"%@", num); // 97        num = [NSNumber numberWithInteger:97];    num = [NSNumber numberWithFloat:97.0];    num = [NSNumber numberWithBool:YES];        // 不过直接用下面的方式封装会更方便    num = @'a';    num = @97;    num = @97.0;    num = @YES;        // 既然NSNumber能封装BOOL,NSInteger,CGFloat等基础数据格式,那如何判断NSNumber是什么基础类型呢,接着看    /*     + (NSNumber *)numberWithChar:(char)value;     + (NSNumber *)numberWithUnsignedChar:(unsigned char)value;     + (NSNumber *)numberWithShort:(short)value;     + (NSNumber *)numberWithUnsignedShort:(unsigned short)value;     + (NSNumber *)numberWithInt:(int)value;     + (NSNumber *)numberWithUnsignedInt:(unsigned int)value;     + (NSNumber *)numberWithLong:(long)value;     + (NSNumber *)numberWithUnsignedLong:(unsigned long)value;     + (NSNumber *)numberWithLongLong:(long long)value;     + (NSNumber *)numberWithUnsignedLongLong:(unsigned long long)value;     + (NSNumber *)numberWithFloat:(float)value;     + (NSNumber *)numberWithDouble:(double)value;     + (NSNumber *)numberWithBool:(BOOL)value;     + (NSNumber *)numberWithInteger:(NSInteger)value NS_AVAILABLE(10_5, 2_0);     + (NSNumber *)numberWithUnsignedInteger:(NSUInteger)value NS_AVAILABLE(10_5, 2_0);     */    num = [NSNumber numberWithChar:'a'];    NSLog(@"%@ %@", NSStringFromClass(num.class), @(num.objCType)); // __NSCFNumber c    num = [NSNumber numberWithUnsignedChar:'a'];    NSLog(@"%@ %@", NSStringFromClass(num.class), @(num.objCType)); // __NSCFNumber s    num = [NSNumber numberWithShort:97];    NSLog(@"%@ %@", NSStringFromClass(num.class), @(num.objCType)); // __NSCFNumber s    num = [NSNumber numberWithUnsignedShort:97];    NSLog(@"%@ %@", NSStringFromClass(num.class), @(num.objCType)); // __NSCFNumber i    num = [NSNumber numberWithInt:97];    NSLog(@"%@ %@", NSStringFromClass(num.class), @(num.objCType)); // __NSCFNumber i    num = [NSNumber numberWithUnsignedInt:97];    NSLog(@"%@ %@", NSStringFromClass(num.class), @(num.objCType)); // __NSCFNumber q    num = [NSNumber numberWithLong:97];    NSLog(@"%@ %@", NSStringFromClass(num.class), @(num.objCType)); // __NSCFNumber i    num = [NSNumber numberWithUnsignedLong:97];    NSLog(@"%@ %@", NSStringFromClass(num.class), @(num.objCType)); // __NSCFNumber q    num = [NSNumber numberWithLongLong:97];    NSLog(@"%@ %@", NSStringFromClass(num.class), @(num.objCType)); // __NSCFNumber q    num = [NSNumber numberWithUnsignedLongLong:97];    NSLog(@"%@ %@", NSStringFromClass(num.class), @(num.objCType)); // __NSCFNumber q    num = [NSNumber numberWithFloat:1.2];    NSLog(@"%@ %@", NSStringFromClass(num.class), @(num.objCType)); // __NSCFNumber f    num = [NSNumber numberWithDouble:1.2];    NSLog(@"%@ %@", NSStringFromClass(num.class), @(num.objCType)); // __NSCFNumber d    num = [NSNumber numberWithBool:YES];    NSLog(@"%@ %@", NSStringFromClass(num.class), @(num.objCType)); // __NSCFBoolean c    num = [NSNumber numberWithInteger:97];    NSLog(@"%@ %@", NSStringFromClass(num.class), @(num.objCType)); // __NSCFNumber i    num = [NSNumber numberWithUnsignedInteger:YES];    NSLog(@"%@ %@", NSStringFromClass(num.class), @(num.objCType)); // __NSCFNumber i        // 这样就看出来了,判断整型int类,包括short, unsigned short, int, unsigned int, long, unsigned long, long long, unsigned long long,就这样判断    NSArray *intTypeArray = @[@"s", @"i", @"q"];    NSString *intType = [NSString stringWithFormat:@"%s", num.objCType];    if ([NSStringFromClass(num.class) isEqualToString:@"__NSCFNumber"] && [intTypeArray containsObject:intType]) {        NSLog(@"%@是一个整数", num);    }    // 浮点型判断    NSArray *floatTypeArray = @[@"f", @"d"];    <pre name="code" class="objc">    NSString *floatType = [NSString stringWithFormat:@"%s", num.objCType];    if ([NSStringFromClass(num.class) isEqualToString:@"__NSCFNumber"] && [floatTypeArray containsObject:floatType]) {        NSLog(@"%@是一个浮点型", num);    }    // char判断    NSArray *charTypeArray = @[@"c"];    NSString *charType = [NSString stringWithFormat:@"%s", num.objCType];    if ([NSStringFromClass(num.class) isEqualToString:@"__NSCFNumber"] && [charTypeArray containsObject:charType]) {        NSLog(@"%@是一个字符型", num);    }    // BOOL判断    if ([NSStringFromClass(num.class) isEqualToString:@"__NSCFBoolean"]) {        NSLog(@"%@是一个字符型", num);    }    if ([num isKindOfClass:NSClassFromString(@"__NSCFBoolean")]) {        NSLog(@"num is BOOL type");    } else {        NSLog(@"num is not BOOL type");    }    // 下面聊NSNumberFormatter    // 从学号谈起,一般学号的全格式是 入学年份(前两位)+大学(学院)代码+专业代码+班级+个人班级学号 05+01+02+1+01,给班级学生列成绩单,知道学生班级学号,生成学校学号,如5号,应该生成050102105,我们想到的方法是c中的格式化,例如:    NSInteger classCode = 5;    NSString *schoolStuCode = [NSString stringWithFormat:@"0501021%2.2d", classCode];    NSLog(@"schoolStuCode = %@", schoolStuCode); // 050102105        // 另一种方法是NSNumberFormatter转换,上代码    // 数据格式转换类    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];        numberFormatter.numberStyle = kCFNumberFormatterNoStyle;    numberFormatter.formatWidth = 2;    // 数据宽度为2,不足前面补0    numberFormatter.paddingCharacter = @"0";    schoolStuCode = [NSString stringWithFormat:@"0501021%@", [numberFormatter stringFromNumber:@(classCode)]];    NSLog(@"schoolStuCode = %@", schoolStuCode); // 050102105    // 这里也输出了050102105        // 之后体验NSNumberFormatter强大功能    // 字符串分隔,可用于手机号显示    NSString *formatterStr;    numberFormatter.numberStyle = kCFNumberFormatterDecimalStyle;    formatterStr = [numberFormatter stringFromNumber:@102140302];    NSLog(@"%@", formatterStr); // 102,140,302    // 从格式字符串转换为数据,其他类似    NSNumber *number = [numberFormatter numberFromString:formatterStr];    NSLog(@"number = %@", number);    // 货币符号    numberFormatter.numberStyle = NSNumberFormatterCurrencyStyle;    formatterStr = [numberFormatter stringFromNumber:@1.2];    NSLog(@"%@", formatterStr); // $1.20    // 百分数格式    numberFormatter.numberStyle = kCFNumberFormatterPercentStyle;    formatterStr = [numberFormatter stringFromNumber:@1.2];    NSLog(@"%@", formatterStr); // 120%    // 科学计数格式    numberFormatter.numberStyle = kCFNumberFormatterScientificStyle;    formatterStr = [numberFormatter stringFromNumber:@1.2];    NSLog(@"%@", formatterStr); // 1.2E0    // 口语格式    numberFormatter.numberStyle = kCFNumberFormatterSpellOutStyle;    formatterStr = [numberFormatter stringFromNumber:@1.2];    NSLog(@"%@", formatterStr); // one point two
 

Five numeric types in objective-C (nsnumber and nsnumberformatter)

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.