NSDecimalNumber用于精度准确的计算
2024-10-19 02:14:30
在处理金额计算时,往往会涉及到小数,由于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];
最新文章
- Downgrade PHP 7 to PHP 5.6 on Ubuntu 16.04
- C++调用约定和名字约定
- nio加强服务端并发
- jenkins解决jenkins内存溢出问题
- scala学习之第三天:数组的特性与使用技巧
- 配置Tomcat数据源
- Notes of the scrum meeting(11/3)
- Entity Framework实体模型 入门视频教程
- mysql中exists、not exists的用法
- QueueAPI记录
- QT creator编程C++第一步,说“Hello world!”
- WebGL学习(2) - 3D场景
- Python全栈考试(一)
- WPF 简单的循环GIF播放
- springboot springmvc拦截器 拦截POST、PUT、DELETE请求参数和响应数据,并记录操作日志
- MySQL之排序、分组(五)
- 在coding或者github建立个人站点域名绑定
- Redis实现的分布式锁和分布式限流
- C++ 多继承与虚基类
- Python中print格式化输出
热门文章
- JAVA中的线程安全与非线程安全
- 如何使用Service的Context弹出Dialog对话框,即全局性对话框
- 探讨兼容IE低版本的PC端响应式布局
- (转)dp和dip是同一个单位
- Python基础二
- poj 1270(toposort)
- jstl param url redirect import
- 编译带有PROJ4和GEOS模块的GDAL
- 最小生成树的Kruskal算法实现
- PHP获取当前url路径的函数及服务器变量:QUERY_STRING、REQUEST_URI、SCRIPT...