NSDecimalNumber 简介
NSDecimalNumber 是一个十进制数字类,继承自NSNumber,苹果针对浮点类型计算精度问题提供出来的计算类,基于十进制的科学计数法来计算,同时可以指定舍入模式,一般用于货币计算。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
创建并返回一个十进制对象
@param dcm 十进制的结构体
*/
- (instancetype)initWithDecimal:(NSDecimal)dcm;
/**
@param mantissa 十进制尾数 (如:123)
@param exponent 指数 (如:3)
@param flag 是否为负 (如:YES)
return 十进制数字对象 (如:-123000)
*/
- (instancetype)initWithMantissa:(unsigned long long)mantissa
exponent:(short)exponent
isNegative:(BOOL)flag;
/**
@param numberValue 数字字符串
*/
- (instancetype)initWithString:(nullable NSString *)numberValue;
/**
@param numberValue 数字字符串,可以根据locale来解析 (如:@"123,456")
@param locale 解析<numberValue>的字典(特别是NSLocaleDecimalSeparator:分割整数跟小数)
(如 @{NSLocaleDecimalSeparator:@","})
@return 十进制数字对象 (如:123.456)
*/
- (instancetype)initWithString:(nullable NSString *)numberValue
locale:(nullable id)locale;
NSDecimalNumberHandler
NSDecimalNumber的公共协议处理类,可以设置舍入模式以及计算错误的处理;配合NSDecimalNumber来使用,将这个类的实例当做NSDecimalNumber相应API的参数来控制数字处理的结果。
1 |
|
NSRoundingMode的几种方式:
- NSRoundPlain:四舍五入
- NSRoundDown:只舍不入
- NSRoundUp:只入不舍
- NSRoundBankers: 在四舍五入的基础上加了一个判断:当最后一位为5的时候,只会舍入成偶数。比如:1.25不会返回1.3而是1.2,因为1.3不是偶数。
加法运算
1 |
|
减法运算
1 |
|
除法运算
1 |
|
次方运算
1 |
|
10为底的乘方运算
1 |
|
舍入运算
1 |
|