三分轻狂,七分深藏,才能立于不败之地。
————四无君
学习一门编程语言的途径有很多,阅读官方文档就是一条学习并提高自己编程能力的途径之一,毕竟官方文档相较于其他资料更全面,更具体,准确性更高;
iOS官方文档包含的内容很多,参照目录决定先从Foundation开始,毕竟Foundation篇是基础篇;
NSInteger,NSUInteger
NSInteger表示一个整数,可能用到的常量 NSIntegerMax
(最大值NSInteger),NSIntegerMin
(最小值NSInteger);
NSUInteger表示一个无符号整数;
NSDecimal, NSDecimalNumber
NSDecimal表示基数为10的结构,NSDecimalNumber用于表示和执行基数为10的算术的对象。
NSDecimalNumber实例可以表示任何数字,可以表示为mantissa x 10^exponent尾数是长度为38位的十进制整数,指数是-128到127之间的整数。
这里主要介绍NSDecimalNumber;
NSDecimalNumber——创建十进制数
/**
创建十进制数
@param mantissa: 新十进制数对象的尾数。
@param exponent: 新十进制数对象的指数。
@param isNegative: 一个布尔值,指定数字的符号是否为负
@return NSDecimalNumber: 十进制数
*/
+ (NSDecimalNumber *)decimalNumberWithMantissa:(unsigned long long)mantissa exponent:(short)exponent isNegative:(BOOL)flag;
/**
创建十进制数
@param numericString: 数字字符串。
@return NSDecimalNumber: 十进制数
*/
+ (NSDecimalNumber *)decimalNumberWithString:(nullable NSString *)numberValue;
/**
创建十进制数
@param numericString: 数字字符串
@param locale: 代表一种格式,NSDictionary类型
@return NSDecimalNumber: 十进制数
*/
+ (NSDecimalNumber *)decimalNumberWithString:(nullable NSString *)numberValue locale:(nullable id)locale;
//1234x10^–2 = 12.34
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithMantissa:1234 exponent:-2 isNegative:NO];//12.34
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:@"12.34"];//12.34
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:@"12.34" locale:nil];//12.34
//以","当做小数点格式
NSDictionary *locale = [NSDictionary dictionaryWithObject:@"," forKey:NSLocaleDecimalSeparator];
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:@"12,34" locale:locale];//12.34
NSDecimalNumber——执行算术
**** 加法运算 ****
/**
加法运算
@param decimalNumber: 要加的十进制数
@return NSDecimalNumber: 十进制数
*/
- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber;
/**
加法运算
@param decimalNumber: 要加的十进制数
@param behavior: NSDecimalNumberHandler对象,指定计算错误和舍入的处理
@return NSDecimalNumber: 十进制数
*/
- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;
NSDecimalNumber *total = [number decimalNumberByAdding:addNumber];//12.34+12.34 = 24.68
NSDecimalNumberHandler *hander = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:1 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:YES];
NSDecimalNumber *roundedTotal = [number decimalNumberByAdding:number1 withBehavior:hander];//24.7
**** 减法运算 ****
/**
减法运算
@param decimalNumber: 要减的十进制数
@return NSDecimalNumber: 十进制数
*/
- (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber;
/**
减法运算
@param decimalNumber: 要减的十进制数
@param behavior: NSDecimalNumberHandler对象,指定计算错误和舍入的处理
@return NSDecimalNumber: 十进制数
*/
- (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;
NSDecimalNumber *subtraction = [number decimalNumberBySubtracting: subtractNumber];//12.34 - 12.34 = 0;
**** 乘法运算 ****
/**
乘法运算
@param decimalNumber: 要乘的十进制数
@return NSDecimalNumber: 十进制数
*/
- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber;
/**
乘法运算
@param decimalNumber: 要乘的十进制数
@param behavior: NSDecimalNumberHandler对象,指定计算错误和舍入的处理
@return NSDecimalNumber: 十进制数
*/
- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;
NSDecimalNumber *multiplication = [number decimalNumberByMultiplyingBy: mulNumber];//12.34 * 12.34 = 152.2756;
**** 除法运算 ****
/**
除法运算
@param decimalNumber: 要除的十进制数
@return NSDecimalNumber: 十进制数
*/
- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber;
/**
除法运算
@param decimalNumber: 要除的十进制数
@param behavior: NSDecimalNumberHandler对象,指定计算错误和舍入的处理
@return NSDecimalNumber: 十进制数
*/
- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;
NSDecimalNumber *division = [number decimalNumberByDividingBy:divNumber];//12.34 / 12.34 = 1;
**** 舍入运算 ****
# NSDecimalNumberHandler
/**
舍入运算
@param roundingMode: 舍入模式
@param scale: 小数点后保留的位数
@param exact: 精度错误处理
@param overflow: 溢出错误处理
@param underflow 下溢错误处理
@param divideByZero 除以0的错误处理
@return instancetype: 十进制数
*/
/** roundingMode: 舍入模式,有四种可能的值
* NSRoundPlain: 四舍五入
* NSRoundDown: 只舍不入
* NSRoundUp: 只入不舍
* NSRoundBankers: 四舍六入, 中间值时, 取最近的,保留最后一位为偶数
*/
+ (instancetype)decimalNumberHandlerWithRoundingMode:(NSRoundingMode)roundingMode scale:(short)scale raiseOnExactness:(BOOL)exact raiseOnOverflow:(BOOL)overflow raiseOnUnderflow:(BOOL)underflow raiseOnDivideByZero:(BOOL)divideByZero;
/**
舍入运算
@param behavior: NSDecimalNumberHandler对象,指定计算错误和舍入的处理
@return NSDecimalNumber: 十进制数
*/
- (NSDecimalNumber *)decimalNumberByRoundingAccordingToBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;
NSDecimalNumberHandler *hander = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain scale:1 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:YES];
NSDecimalNumber *rounded = [number decimalNumberByRoundingAccordingToBehavior:hander];//12.3
**** 指数运算,a乘以10的n次方 ****
/**
指数运算
@param power: n次方
@return NSDecimalNumber: 十进制数
*/
- (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power;
- (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;
NSDecimalNumber *index = [number decimalNumberByMultiplyingByPowerOf10:2];//12.34*10^2 = 1234
**** 乘方运算,a的n次方 ****
/**
乘方运算
@param power: n次方
@return NSDecimalNumber: 十进制数
*/
- (NSDecimalNumber *)decimalNumberByRaisingToPower:(NSUInteger)power;
- (NSDecimalNumber *)decimalNumberByRaisingToPower:(NSUInteger)power withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;
NSDecimalNumber *power = [number decimalNumberByRaisingToPower:2];//12.34^2 = 152.2756
**** 比较十进制数 ****
/**
* NSOrderedAscending: 升序
* NSOrderedSame: 相等
* NSOrderedDescending: 降序
*/
- (NSComparisonResult)compare:(NSNumber *)decimalNumber;
if ([number compare:orderNumber] == NSOrderedAscending) {
NSLog(@"小于");
}else if ([number compare:number1] == NSOrderedDescending){
NSLog(@"大于");
}else if ([number compare:number1] == NSOrderedSame){
NSLog(@"相等");
}
NSNumber, NSNumberFormatter
NSNumber原始数值的包装对象,NSNumberFormatter数字格式化;
创建NSNumber对象
+ (NSNumber *)numberWithInteger:(NSInteger)value;
// 创建
NSNumber *number = [NSNumber numberWithInteger:10];
// 取值
NSInteger integer = number.integerValue;
NSNumberFormatter使用
**** 创建 ****
NSNumber *num = [NSNumber numberWithDouble:1234.5678];
NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init];
//区域设置
formatter.locale = [NSLocale autoupdatingCurrentLocale];
//将数字字符串转为NSDecimalNumber对象
formatter.generatesDecimalNumbers = YES;
NSString *string = [formatter stringFromNumber:num];
**** 格式 ****
//设置格式
formatter.numberStyle = kCFNumberFormatterNoStyle;
//整数格式
NSNumberFormatterNoStyle //1235
//小数格式
NSNumberFormatterDecimalStyle //1,234.568
//货币格式
NSNumberFormatterCurrencyStyle //¥1,234.57
//百分比格式
NSNumberFormatterPercentStyle //123,457%
//科学计数法格式
NSNumberFormatterScientificStyle //1.2345678E3
//数字区域设置定义的语言拼写出来。
NSNumberFormatterSpellOutStyle //one thousand two hundred thirty-four point five six seven eight / 一千二百三十四点五六七八
//序数式格式。
NSNumberFormatterOrdinalStyle //1,235th
//货币格式,使用区域设置定义的ISO 4217货币代码
NSNumberFormatterCurrencyISOCodeStyle //CNY1,234.57
//货币格式,使用区域设置定义的复数面额。
NSNumberFormatterCurrencyPluralStyle //1,234.57 Chinese yuan / 1,234.57人民币
//货币格式,使用区域设置定义的货币符号。
NSNumberFormatterCurrencyAccountingStyle //¥1,234.57
**** 自定义格式 ****
//显示负值的格式
formatter.positiveFormat = @"#,#,#,0.0000";//-1,2,3,4.5678
//显示正值的格式
formatter.positiveFormat = @"##,##,#0.000";//12,34.568
**** 前缀&后缀 ****
//正值的前缀
formatter.positivePrefix = @"+";//+1,234.568
//正值的后缀
formatter.positiveSuffix = @"+";//+1,234.568+
//负值的前缀
formatter.negativePrefix = @"-";//-1,234.568
//负值的后缀
formatter.negativeSuffix = @"-";//-1,234.568-
**** 分组 ****
//分组尺寸
formatter.groupingSize = 2;//12,34.568
//二级分组尺寸
formatter.secondaryGroupingSize = 1;//1,2,34.568
**** 字符串填充 ****
//格式宽度
formatter.formatWidth = 10;
//填充字符串
formatter.paddingCharacter = @"#";
//数字的填充位置
formatter.paddingPosition =
NSNumberFormatterPadBeforeSuffix;
//填充在前缀之前
NSNumberFormatterPadBeforePrefix
//填充在前缀之后
NSNumberFormatterPadAfterPrefix
//填充在后缀之前
NSNumberFormatterPadBeforeSuffix
//填充在后缀之后
NSNumberFormatterPadAfterSuffix
**** 舍入 ****
//舍入模式
formatter.roundingMode = NSNumberFormatterRoundCeiling;//1,234.568
//为正数时,向远离0的地方进位;当为负数时,向离靠近0的地方进位
NSNumberFormatterRoundCeiling //1,234.568 || -1,234.567
//向负无穷大舍入(负数则入,正数则舍)
NSNumberFormatterRoundFloor //-1,234.568 || 1,234.567 || 1,234.123 || -1,234.124
//向0舍入
NSNumberFormatterRoundDown //1,234.567
//从0舍弃
NSNumberFormatterRoundUp //1,234.112
//向最近的整数舍入,或者如果等距则朝向偶数
NSNumberFormatterRoundHalfEven //0.5—>0 1.5—>2
//向最近的整数舍入,如果等距则向零舍入
NSNumberFormatterRoundHalfDown //0.5—>0 0.51—>1
//向最近的整数舍入,如果等距离则从零开始。
NSNumberFormatterRoundHalfUp //0.5—>1 0.51—>1
// 舍入增量(进位值)
formatter.roundingIncrement = @100;//1200
**** 位数设置 ****
//小数分隔符前的最小位数
formatter.minimumIntegerDigits = 2;//1,234.568
//小数分隔符前的最大位数
formatter.maximumIntegerDigits = 2;//34.568
//小数分隔符后的最小位数
formatter.minimumFractionDigits = 2;//1,234.568
//小数分隔符后的最大位数
formatter.maximumFractionDigits = 6;//1,234.5678
**** 分隔符 ****
//小数分隔符
formatter.decimalSeparator = @"&";//1,234&568
//是否始终显示小数分隔符
formatter.alwaysShowsDecimalSeparator = YES;//1,234&568
//货币小数分隔符
formatter.currencyDecimalSeparator = @"^";//CNY1,234^57
//是否显示组分隔符
formatter.usesGroupingSeparator = NO;//CNY1234^57
//分组分隔符
formatter.groupingSeparator = @".";//1.234.568
//货币分组分隔符。
formatter.currencyGroupingSeparator = @"%";//¥1%234.57
**** 符号替换 ****
//表示零值的字符串
formatter.zeroSymbol = @"#";//#
//表示正无穷大符号的字符串
formatter.positiveInfinitySymbol = @"+∞";
//表示负无穷大符号的字符串。
formatter.negativeInfinitySymbol = @"-∞";
//货币代码(澳元的货币代码是“AUD”)
formatter.currencyCode = @"AUD";//AU$1,234.57
//本地货币符号字符串
formatter.currencySymbol = @"∏";//∏1,234.57
//国际货币符号字符串
formatter.internationalCurrencySymbol = @"∑";//∑1,234.57
//表示百分比符号的字符串。
formatter.percentSymbol = @"per";//123,457per
//表示千分比符号的字符串。
formatter.perMillSymbol = @"mill";
//表示减号的字符串
formatter.minusSign = @"minus";//minus1235
//表示加号的字符串
formatter.plusSign = @"plus";
//表示指数符号的字符串
formatter.exponentSymbol = @"ex";
非常优秀的简书内容
https://www.jianshu.com/p/2b4a5b91aa16
https://www.jianshu.com/p/6059cf646f3b