在处理金额计算时,往往会涉及到小数,由于Double类型不准确,无法做到产品的要求。为了保证金额计算的准确性,建议使用NSDecimalNumber。

1.创建对象(常用的方法)

// mantissa:长整型数值;exponent:指数(几次方);flag:正负数。
+ (NSDecimalNumber *)decimalNumberWithMantissa:(unsigned long long)mantissa exponent:(short)exponent isNegative:(BOOL)flag; NSDecimalNumber *decimalNumber = [NSDecimalNumber decimalNumberWithMantissa: exponent:- isNegative:NO]; //8.29
decimalNumber = [NSDecimalNumber decimalNumberWithMantissa: exponent: isNegative:YES]; //-82900 // locale代表一种格式
+ (NSDecimalNumber *)decimalNumberWithString:(nullable NSString *)numberValue locale:(nullable id)locale;
NSDictionary *locale = [NSDictionary dictionaryWithObject:@"," forKey:NSLocaleDecimalSeparator]; //以","当做小数点格式
NSDecimalNumber *discountAmount = [NSDecimalNumber decimalNumberWithString:@"123,40" locale:locale]; //123.4 + (NSDecimalNumber *)decimalNumberWithString:(nullable NSString *)numberValue;

2.逻辑运算

加:
- (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; 乘:
- (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; a的n次方:
- (NSDecimalNumber *)decimalNumberByRaisingToPower:(NSUInteger)power;
- (NSDecimalNumber *)decimalNumberByRaisingToPower:(NSUInteger)power withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior; 指数运算:
- (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power;
- (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior; 四舍五入运算:
- (NSDecimalNumber *)decimalNumberByRoundingAccordingToBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior; 比较运算:
-(NSComparisonResult)compare:(NSNumber *)decimalNumber;

3.数值格式设置

// roundingMode:舍入模式; scale:保留几位小数;exact:发生精确错误时是否抛出异常,一般为NO;overflow:发生溢出错误时是否抛出异常,一般为NO; underflow:发生不足错误时是否抛出异常,一般为NO; divideByZero:被0除时是否抛出异常,一般为YES
+ (instancetype)decimalNumberHandlerWithRoundingMode:(NSRoundingMode)roundingMode scale:(short)scale raiseOnExactness:(BOOL)exact raiseOnOverflow:(BOOL)overflow raiseOnUnderflow:(BOOL)underflow raiseOnDivideByZero:(BOOL)divideByZero; NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler
decimalNumberHandlerWithRoundingMode:NSRoundDown
scale:
raiseOnExactness:NO
raiseOnOverflow:NO
raiseOnUnderflow:NO
raiseOnDivideByZero:YES];

最新文章

  1. Downgrade PHP 7 to PHP 5.6 on Ubuntu 16.04
  2. C++调用约定和名字约定
  3. nio加强服务端并发
  4. jenkins解决jenkins内存溢出问题
  5. scala学习之第三天:数组的特性与使用技巧
  6. 配置Tomcat数据源
  7. Notes of the scrum meeting(11/3)
  8. Entity Framework实体模型 入门视频教程
  9. mysql中exists、not exists的用法
  10. QueueAPI记录
  11. QT creator编程C++第一步,说“Hello world!”
  12. WebGL学习(2) - 3D场景
  13. Python全栈考试(一)
  14. WPF 简单的循环GIF播放
  15. springboot springmvc拦截器 拦截POST、PUT、DELETE请求参数和响应数据,并记录操作日志
  16. MySQL之排序、分组(五)
  17. 在coding或者github建立个人站点域名绑定
  18. Redis实现的分布式锁和分布式限流
  19. C++ 多继承与虚基类
  20. Python中print格式化输出

热门文章

  1. JAVA中的线程安全与非线程安全
  2. 如何使用Service的Context弹出Dialog对话框,即全局性对话框
  3. 探讨兼容IE低版本的PC端响应式布局
  4. (转)dp和dip是同一个单位
  5. Python基础二
  6. poj 1270(toposort)
  7. jstl param url redirect import
  8. 编译带有PROJ4和GEOS模块的GDAL
  9. 最小生成树的Kruskal算法实现
  10. PHP获取当前url路径的函数及服务器变量:QUERY_STRING、REQUEST_URI、SCRIPT...