NSDecimalNumber用于精度准确的计算

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

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

// mantissa:长整型数值;exponent:指数(几次方);flag:正负数。
+ (NSDecimalNumber *)decimalNumberWithMantissa:(unsigned long long)mantissa exponent:(short)exponent isNegative:(BOOL)flag;

NSDecimalNumber *decimalNumber = [NSDecimalNumber decimalNumberWithMantissa:829 exponent:-2 isNegative:NO];   //8.29
decimalNumber = [NSDecimalNumber decimalNumberWithMantissa:829 exponent:2 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:2
                                       raiseOnExactness:NO
                                       raiseOnOverflow:NO
                                       raiseOnUnderflow:NO
                                       raiseOnDivideByZero:YES];
时间: 2024-10-20 23:07:37

NSDecimalNumber用于精度准确的计算的相关文章

Nova.v2.2b36.WinALL 1CD(实时准确跟踪计算卫星位置的软件)

Engine Analyzer Pro.v3.3 A028 1CD(一款模拟引擎改进和修正的工具.你可以尝试不同的凸轮.heads.进气管和增压机, 然后观察对扭矩.马力.气流.燃料流.最大缸压.容积效率的影响) NLSA.Nova.v2.2b36.WinALL 1CD(实时准确跟踪计算卫星位置的软件) Optimal Solutions Sculptor v1.8.6 1CD(用于航天航空工业的图形软件) Plane Failure Analysis v2.1 1CD PlanTracer P

4 个用于执行高级数学计算的 JavaScript 库

在使用JavaScript执行数学方面的任务时,往往要用到浮点运算,且需要精确到某位小数,这就容易造成错误,而且会相当费时.因此,如果你需要做一些高精度的数学计算的编程工作,比如财务或科学计算,那么你一定需考虑使用下面的这些库. 1.  numbers.js numbers.js提供了大量的.可用于服务器端的数学功能,你可以用它来执行下面这些任务: 基本计算(如两数相加) 复数 微积分 数字信号处理(DSP) 矩阵运算 素数计算 统计 迭代计算(如斐波那契数列) 要使用numbers.js,你首

Android Google Maps API 网络服务用于网络定位、计算路线、获取经纬度、获取详细地址等

---恢复内容开始--- extends:http://blog.csdn.net/h7870181/article/details/12505883 Google Maps API 网络服务 官网地址 : https://developers.google.com/maps/documentation/webservices/?hl=zh-cn 其实就是一些接口,供我们调用,如: 1.根据地址获取经纬度 http://maps.google.com/maps/api/geocode/json?

大数据流式计算:关键技术及系统实例

孙大为1, 张广艳1,2, 郑纬民1 摘要:大数据计算主要有批量计算和流式计算两种形态,目前,关于大数据批量计算系统的研究和讨论相对充分,而如何构建低延迟.高吞吐且持续可靠运行的大数据流式计算系统是当前亟待解决的问题且研究成果和实践经验相对较少.总结了典型应用领域中流式大数据所呈现出的实时性.易失性.突发性.无序性.无限性等特征,给出了理想的大数据流式计算系统在系统结构.数据传输.应用接口.高可用技术等方面应该具有的关键技术特征,论述并对比了已有的大数据流式计算系统的典型实例,最后阐述了大数据流

超计算(Hyper computation)模型

超计算(Hyper computation)模型 作者:Xyan Xcllet链接:https://www.zhihu.com/question/21579465/answer/106995708来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 超计算,是一个研究比图灵机计算能力更强的计算能力的计算机器的理论计算机科学分支. 主要有以下部分模型: A.谕示机.带"黑箱"的图灵机.由图灵本人亲自提出,"黑箱"就是一个谕示,经过一个谕示就可

计算工具的发展简史

现在我们所说的计算机,其全称是通用电子数字计算机,"通用"是指计算机可服务于多种用途,"电子"是指计算机是一种电子设备,"数字"是指在计算机内部一切信息均用0和1的编码来表示.计算机的出现是20世纪最卓越的成就之一,计算机的广泛应用极大地促进了生产力的发展. 自古以来,人类就在不断地发明和改进计算工具,从古老的"结绳记事",到算盘.计算尺.差分机,直到1946年第一台电子计算机诞生,计算工具经历了从简单到复杂.从低级到高级.从

关于BUG率的计算和它的实际意义的思考

我的微信号是Shalayang,以下是我的二维码名片,欢迎添加. 问题1:bug率有什么作用? my opion:用处有很多,需要具体情况具体分析,不过主要作用一般是来评价工作产品的质量.如果bug率较高,说明系统质量较差,需要大量的返工.项目经理就需要做好缺陷分析(缺陷的类型.分布.严重程度等),找出原因,以便做好下一阶段的缺陷预防工作.除此之外,还可以结合其它方面的信息,判断是否一些工作不充分.譬如,如果缺陷密度过低,有两个原因:可能工作产品质量确实高:也可能评审或测试不充分,更多的缺陷没有

使用BigDecimal来进行精确计算

在一些以金融等行业中的计算是需要十分精确的,即使我们使用像double这样的类型,由于浮点数的原因,会使得数据计算变得不精确,例如下面的例子: 1 double a = 0.1; 2 double b = 0.005; 3 System.out.println(a+b); 则结果为:0.10500000000000001. 像double这样的浮点数类型,只能用于平常的科学计算,要想使得计算精确无误,必须使用Java中的BigDecimal类型. 例: 1 BigDecimal a = new

Cassandra与HBase都是被设计用于管理非常大的数据集

在java商城开发中我们都清楚的知道Cassandra与HBase都是NoSQL数据库.总体上看,这意味着用户无法使用SQL数据库.不过,Cassandra使用的是CQL(Cassandra 查询语言),其语法有明显模仿SQL的痕迹.    在jsp商城开发中两者都被设计用于管理非常大的数据集.HBase文件声称一个HBase数据库可以拥有数亿个,甚至是数十亿个行.此外,用户还被建议继续使用关系型数据库.两者都是分布式数据库,不仅仅是在数据的存储方式上,在数据访问方式上亦是如此.客户端可以与集群