【2016-5-25】NSDecimalNumber 知识点的简单整理

NSDecimalNumber是NSNumber的子类,比NSNumber的功能更为强大,可以指定一个数的幂,四舍五入等操作。

NSString类型转化成CGFloat 精度不高的情况。例如 @"8" -> 7.99999    @"1.0" -> 1.00001

由于NSDecimalNumber精度较高,所以会比基本数据类型费时,所以需要权衡考虑,苹果官方建议在货币以及要求精度很高的场景下使用。

一、一些科学计数法的简单方法。

//一个关于科学计数法的方法:参数 1.mantissa 实数 2.exponent 指数 3.flag 正负- (instancetype)initWithMantissa:(unsigned long long)mantissa exponent:(short)exponent isNegative:(BOOL)flag;

+ (NSDecimalNumber *)decimalNumberWithMantissa:(unsigned long long)mantissa exponent:(short)exponent isNegative:(BOOL)flag;

例:mantissa = 6 ,exponent = 2 ,flag = false    结果:6*10^2 = 600。

//一个科学计数法的初始化方法:numberValue 一定格式的字符串(详情见官方文档)- (instancetype)initWithString:(nullable NSString *)numberValue;+ (NSDecimalNumber *)decimalNumberWithString:(nullable NSString *)numberValue;

例:NSDecimalNumber *a = [[NSDecimalNumber alloc] initWithString:@"-4e3"]; 输出:-4000。

二、NSDecimalNumber 对象值进行操作

//一些基本赋值
+ (NSDecimalNumber *)zero;              //Returns an NSDecimalNumber object equivalent to the number 1.0.
+ (NSDecimalNumber *)one;              //Returns an NSDecimalNumber object equivalent to the number 0.0.
+ (NSDecimalNumber *)minimumDecimalNumber;    //-340282366920938463463374607431768211455
+ (NSDecimalNumber *)maximumDecimalNumber;
+ (NSDecimalNumber *)notANumber;          //Returns an NSDecimalNumber object that specifies no number.非数字

例:NSDecimalNumber * a = [NSDecimalNumber decimalNumberWithString:@"2.5301"];

   NSDecimalNumber * b = [NSDecimalNumber decimalNumberWithString:@"7.5001"];

  NSDecimalNumberHandler *roundingBehavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundBankers

                                                            scale:2

                                                     raiseOnExactness:NO

                                                      raiseOnOverflow:NO

                                                      raiseOnUnderflow:NO

                                                    raiseOnDivideByZero:NO];

//加法运算  参数 behavior 对的到的结构做一些限制(后面有说明)
- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByAdding:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;
  eg. NSDecimalNumber *c = [a decimalNumberByAdding:b];  结果:10.032  NSDecimalNumber *c = [a decimalNumberByAdding:b withBehavior:roundingBehavior]; 结果:10.03
//减法运算
- (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberBySubtracting:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;

   eg.NSDecimalNumber *c = [a decimalNumberBySubtracting:b]; 结果:-4.97

    NSDecimalNumber *c = [a decimalNumberBySubtracting:b withBehavior:roundingBehavior]; 结果:-4.97

//乘法运算
- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByMultiplyingBy:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;  eg.NSDecimalNumber *c = [a decimalNumberByMultiplyingBy:b]; 结果:18.97600301NSDecimalNumber *c = [a decimalNumberByMultiplyingBy:b withBehavior:roundingBehavior]; 结果:18.98
//除法运算
- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber;
- (NSDecimalNumber *)decimalNumberByDividingBy:(NSDecimalNumber *)decimalNumber withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;

   eg.NSDecimalNumber *c = [a decimalNumberByDividingBy:b]; 结果:0.3373421687710830522259703203957280

  NSDecimalNumber *c = [a decimalNumberByDividingBy:b withBehavior:roundingBehavior]; 结果:0.34

//a的n次方 参数 - (NSDecimalNumber *)decimalNumberByRaisingToPower:(NSUInteger)power;- (NSDecimalNumber *)decimalNumberByRaisingToPower:(NSUInteger)power withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;  eg.NSDecimalNumber *c = [a decimalNumberByRaisingToPower:3];  结果:16.196197345901    NSDecimalNumber *c = [a decimalNumberByRaisingToPower:3 withBehavior:roundingBehavior]; 结果:16.2
//指数运算 - (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power;- (NSDecimalNumber *)decimalNumberByMultiplyingByPowerOf10:(short)power withBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;
//四舍五入- (NSDecimalNumber *)decimalNumberByRoundingAccordingToBehavior:(nullable id <NSDecimalNumberBehaviors>)behavior;eg.NSDecimalNumber *c = [a decimalNumberByRoundingAccordingToBehavior:roundingBehavior]; 结果:2.53
 //两数比较
 - (NSComparisonResult)compare:(NSNumber *)decimalNumber;eg.NSLog(@"%ld",(long)[a compare:b]); 结果 -1.
 
//设置默认的behaviors对象+ (void)setDefaultBehavior:(id <NSDecimalNumberBehaviors>)behavior;

+ (id <NSDecimalNumberBehaviors>)defaultBehavior;

    // One behavior per thread - The default behavior is

    //   rounding mode: NSRoundPlain

    //   scale: No defined scale (full precision)

    //   ignore exactnessException

    //   raise on overflow, underflow and divide by zero.
//NSDecimalNumberBehaviors对象的创建  参数 1.RoundingMode 一个取舍枚举值 2.scale 处理范围 3.raiseOnExactness 提高精准度 4.Overflow 溢出 5.Underflow 下溢 6.DivideByZero 可否除以0.
NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler
                                       decimalNumberHandlerWithRoundingMode:NSRoundBankers
                                                          scale:2
                                                   raiseOnExactness:NO
                                                   raiseOnOverflow:NO
                                                  raiseOnUnderflow:NO
                                                 raiseOnDivideByZero:NO];

//四舍五入相关枚举
typedef NS_ENUM(NSUInteger, NSRoundingMode) {
    NSRoundPlain,   // Round up on a tie 取整
    NSRoundDown,    // Always down == truncate 只舍不入
    NSRoundUp,      // Always up 只入不舍
    NSRoundBankers  // on a tie round so last digit is even 四舍五入
};

注:NSDecimalNumberHandler 后面全部设为 NO 的话,默认只进行后两位的的四舍五入操作,再多就是直接舍去。 需要更精确的四舍五入需要scale后面参数某个改为YES。

 

目前 NSDecimalNumber  主要用于 货币计算 和 四舍五入 两个处。如果有更多地方能用到希望补充,谢谢。

时间: 2024-11-08 21:54:54

【2016-5-25】NSDecimalNumber 知识点的简单整理的相关文章

PHP语言基础简单整理

1.开始结束标记<? ... ?> 2.定义变量:$变量名 例: $str="锦清笋";不需要指明数据类型 3.输出语句:(1)echo "hello world!";---echo命令(2)print();输出语句,是函数,有返回值.输出成功返回1,失败返回0.(3) printf();格式化输出字符串.例:printf("%d,%f",12,12.3); (4)sprintf();格式化拼接字符串,不是输出语句,只能将字符串拼接.

关于数字证书理解的简单整理以及12306网站证书简单分析

首先简单理解一下什么是数字证书.这里是一篇英文文档,描述的很形象.形象的描述了什么是公钥,什么是私钥,如果确保数字证书的可靠性等. 下面,我们看一个应用"数字证书"的实例:https协议.这个协议主要用于网页加密. 一般我们电脑的浏览器中都有一些受信任的证书颁发机构列表, 里边存储的都是一些机构的信息.这些机构都是权威的.当然可以通过安装软件的方式,来增加证书颁发机构,比如中国银行的根证书软件,阿里巴巴的根证书软件.默认我们认为这些软件都是从官网下载的,是绝对的没被篡改的,可靠的.简单

哈希综述的简单整理

刚接触哈希,由于之后有其他工作,所以时间比较紧,只是做了一个简单粗糙的整理,可能还有不少错误.自己先放着,以后如果需要用到hash了在回头重新整理. 哈希综述的简单整理.pdf

2016年初中数学知识点中考总复习总结归纳

2016年初中数学知识点中考总复习总结归纳 http://wenku.baidu.com/link?url=NbEiI_Ld2TO3zEH8d5oDxTux2IBWJ5HqNmZ467MGchJTV2G0pyG4_TauOsYhjL6Ybyqp8MxUKM_wtofUqMTc7ePR3gJv3zIY27sTuSGOaRW

MYBATIS 简单整理与回顾

这两天简单整理了一下MyBatis 相关api和jar包这里提供一个下载地址,免得找了 链接:http://pan.baidu.com/s/1jIl1KaE 密码:d2yl A.简单搭建跑项目 2.进行相关xml配置 放在根目录下 3.配置数据库映射文件 这里给个例子文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD

图论模板简单整理

唔,图论部分暂时就看到这里了,整理一下最近学的东西 //最短路 //dijkstra void dijkstra() { memset(vis,0,sizeof(vis)); for(int i = 1;i <= n;i++) { d[i] = -1; } d[n] = 1; for(int k = 1;k <= n;k++) { double maxv = -1; int x = n; for(int i = 1;i <= n;i++) if(!vis[i] && d[

2016 - 1 - 25 第三方网络框架 AFN的简单使用

AFNetworking 底层是对NSURlSession 和对 NSURLConnect 的包装 1.具体使用方法可以参照github上的主页面,在这里只是举一个文件上传的简单列子 - (void)update{ AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; [manager POST:@"http://120.25.226.186:32812/upload" parameters:nil constr

2016.3.25(mySQL简单的数据查询)

要从数据库中查询,要使用SQL的select语句,标准select查询有select子句,where子句,order by子句组成. 查询数据的标准结构为:select 列名 from 表名 where 条件 order by 列名 asc(升序)/desc(降序) 查询操作的分类:1.投影操作,指定查询结果中能显示哪些列 2.选择操作,指定哪行出现在结果中 3.排序操作,指定查询的结果以什么样的顺序显示 投影操作:select 列1,列2 from 表名 表前缀:select 表名.列名 fr

数据库相关知识点(秋招整理)

数据库 1.   数据库事务的 4 个特性是:原子性.一致性.持续性.隔离性 1)   原子性:事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么全部不执行. 2)   一致性:事务前后,数据库的状态都满足所有的完整性约束. 3)   隔离性:并发执行的事务是隔离的,一个不影响一个.如果有两个事务,运行在相同的时间内,执行相同的功能,同一时间仅有一个请求用于同一数据.设置数据库的隔离级别,可以达到不同的隔离效果. 4)   持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保