在有些场景下,我们需要精确到每一个小数点,而有些地方则需要显示最大的小数位;
如:[NSString stringWithFormat:@"%.2f",2000/100] 最终显示的是20.00 ,而需求则是显示20;
NSDecimalNumber
NSDecimalNumber 是iOS中处理精准计算的Number类;在一般的货币计算中,苹果推荐使用这个类;
下面将介绍下常用的方法:
+
- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;
-
- (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;
x
- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;
/
- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;
幂运算
- (NSDecimalNumber *)decimalNumberByRaisingToPower:(NSUInteger)power;
- (NSDecimalNumber *)decimalNumberByRaisingToPower:(NSUInteger)power withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;
10的次方运算
- (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power;
- (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;
比较
- (NSComparisonResult)compare:(NSNumber *)decimalNumber;
NSDecimalNumberHandler
这个类允许设置NSDecimalNumber对象四舍五入和处理错误的方式,而不必创建自定义类。
/*
roundingMode:NSRoundPlain、NSRoundDown、NSRoundUp、NSRoundBankers
scale: 小数点后的位数
raiseOnExactness:如果YES,发生精准错误,处理程序将引发异常;否则忽略错误;
raiseOnOverflow: 如果YES,发生溢出错误,处理程序将引发异常;否则忽略错误;
raiseOnUnderflow: 如果YES,发生向下溢出错误,处理程序将引发异常;否则忽略错误;
raiseOnDivideByZero:如果YES,发生除零错误,处理程序将引发异常;否则忽略错误;
**/
+ (instancetype)decimalNumberHandlerWithRoundingMode:(NSRoundingMode)roundingMode scale:(short)scale raiseOnExactness:(BOOL)exact raiseOnOverflow:(BOOL)overflow raiseOnUnderflow:(BOOL)underflow raiseOnDivideByZero:(BOOL)divideByZero;
网友评论