iOS - OC NSNumber 数字
前言
@interface NSNumber : NSValue
@interface NSDecimalNumber : NSNumber
- 将基本数据类型包装成 OC 对象
1、NSNumber 与 基本数据类型 的相互转换
// 基本数据类型 转 NSNumber
// 对象方法,将整形数据转换为 OC 对象
NSNumber *num1 = [[NSNumber alloc] initWithInt:123];
// 类方法, 将浮点型数据转换成 OC 对象
NSNumber *num2 = [NSNumber numberWithFloat:10.456];
// @ + 基本数据类型 直接创建
NSNumber *num3 = @234;
NSNumber *num4 = @0xabcdefL;
NSNumber *num5 = @'S';
NSNumber *num6 = @100.0f;
int a = 123;
float b = 200.0f;
// @ + 表达式 直接创建
NSNumber *num7 = @((a + b) / 2.0);
// NSNumber 转 基本数据类型
int n1 = [num1 intValue];
float n2 = [num2 floatValue];
NSInteger n3 = [num3 integerValue];
long n4 = [num4 longValue];
char n5 = [num5 charValue];
float n6 = [num6 floatValue];
float n7 = [num7 floatValue];
2、比较两个 NSNumber 类型数据的大小
NSNumber *num1 = [NSNumber numberWithFloat:123];
NSNumber *num2 = [NSNumber numberWithFloat:10.456];
// isEqualToNumber
BOOL bl = [num1 isEqualToNumber:num2];
// compare
NSComparisonResult result = [num1 compare:num2];
if (result == NSOrderedAscending) {
NSLog(@"num1 < num2");
} else if (result == NSOrderedSame) {
NSLog(@"num1 == num2");
} else {
NSLog(@"num1 > num2");
}
3、NSNumber 与 NSString 的相互转换
NSNumber *num = [NSNumber numberWithFloat:10.456];
// NSNumber 转换 NSString
NSString *str = [num stringValue];
// NSString 转 NSNumber
NSNumber *num1 = [NSNumber numberWithFloat:[str floatValue]];
4、NSDecimalNumber 运算
4.1 加、减、乘、除、n 次方 运算
NSDecimalNumber *dcNun1 = [NSDecimalNumber decimalNumberWithString:@"15.99"];
NSDecimalNumber *dcNun2 = [NSDecimalNumber decimalNumberWithString:@"29.99"];
NSDecimalNumber *dcNun3 = [NSDecimalNumber decimalNumberWithString:@"5.00"];
NSDecimalNumber *dcNun4 = [NSDecimalNumber decimalNumberWithString:@".90"];
NSDecimalNumber *dcNun5 = [NSDecimalNumber decimalNumberWithString:@"2.0"];
// 加 Adding
NSDecimalNumber *subtotal = [dcNun1 decimalNumberByAdding:dcNun2];
// 减 Subtracting
NSDecimalNumber *afterCoupon = [subtotal decimalNumberBySubtracting:dcNun3];
// 乘 Multiplying
NSDecimalNumber *afterDiscount = [afterCoupon decimalNumberByMultiplyingBy:dcNun4];
// 平均 Dividing
NSDecimalNumber *average = [afterDiscount decimalNumberByDividingBy:dcNun5];
// n 次方 RaisingToPower
NSDecimalNumber *averageSquared = [average decimalNumberByRaisingToPower:2];
4.2 四舍五入 运算
/*
NSRoundPlain, // Round up on a tie 貌似取整
NSRoundDown, // Always down == truncate 只舍不入
NSRoundUp, // Always up 只入不舍
NSRoundBankers // on a tie round so last digit is even 貌似四舍五入
*/
// 90.7049 + 0.22 然后四舍五入
NSDecimalNumberHandler *roundUp = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundBankers
scale:2
raiseOnExactness:NO
raiseOnOverflow:NO
raiseOnUnderflow:NO
raiseOnDivideByZero:YES];
NSDecimalNumber *subtotal = [NSDecimalNumber decimalNumberWithString:@"90.7049"];
NSDecimalNumber *discount = [NSDecimalNumber decimalNumberWithString:@"0.22"];
// 加 保留 2 位小数
NSDecimalNumber *total = [subtotal decimalNumberByAdding:discount withBehavior:roundUp];
4.3 大小比较
NSDecimalNumber *dcNum1 = [NSDecimalNumber decimalNumberWithString:@".85"];
NSDecimalNumber *dcNum2 = [NSDecimalNumber decimalNumberWithString:@".9"];
NSComparisonResult result = [dcNum1 compare:dcNum2];
if (result == NSOrderedAscending) {
NSLog(@"85%% < 90%% 小于");
} else if (result == NSOrderedSame) {
NSLog(@"85%% == 90%% 等于");
} else if (result == NSOrderedDescending) {
NSLog(@"85%% > 90%% 大于");
}
5、random 随机数
- 随机数在 C 中提供了 rand()、srand()、random()、arc4random() 几个函数。
5.1 使用 arc4random() 生成随机数
1、获取一个随机整数范围在:[0, 100) 包括 0,不包括 100。
int x = arc4random() % 100;
2、获取一个随机数范围在:[100, 200],包括 100,包括 200。
int y = 100 + (arc4random() % 101);
3、抽取方法,获取一个随机整数,范围在 [from, to],包括 from,包括 to。
- (int)getRandomNumber:(int)from to:(int)to {
return (int)(from + (arc4random() % (to - from + 1)));
}
5.2 使用 rand() 生成随机数
在标准的 C 库中,函数 rand() 可以生成
0 ~ RAND_MAX
之间的一个随机数,其中RAND_MAX
是 stdlib.h 中定义的一个整数,它与系统有关。1、rand() 函数没有输入参数,直接通过表达式 rand() 来引用。
printf("Random numbers are: %i %i", rand(), rand());
2、伪随机数。
因为 rand() 函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说 C 语言的随机并不是真正意义上的随机,有时候也叫伪随机数。
为了使程序在每次执行时都能生成一个新序列的随机值,我们通常通过为随机数生成器提供一粒新的随机种子。
函数 srand()(来自 stdlib.h)可以为随机数生成器播散种子,称为随机数生成器的初始化器。只要种子不同 rand() 函数就会产生不同的随机数序列。
3、用 rand() 随机生成在 [100, 200] 内的整数,包括 100,包括 200。
// k 即为所求范围内随机生成的数,rand() % a 的结果最大为 a - 1 srand((unsigned)time(0));
int k = 100 + (rand() % 101);
5.3 rand() 和 random()、arc4random() 比较
rand() 实际并不是一个真正的随机数发生器,在使用之前需要先初始化随机种子,否则每次生成的随机数一样。
arc4random() 是一个真正的随机数发生器,不需要生成随机种子,因为第一次调用的时候就会自动生成。而且范围是 rand() 的两倍,在 iPhone 中,
RAND_MAX
是 0x7fffffff (2147483647),而arc4random() 返回的最大值则是 0x100000000 (4294967296)。精确度比较:arc4random() > random() > rand()。
// rand()
srand((unsigned)time(0)); // 不加这句每次产生的随机数不变
int i = rand() % 100; // random()
srandom(time(0)); // 不加这句每次产生的随机数不变
int i = random() % 100; // arc4random()
int i = arc4random() % 100;
5.4 生成指定长度的随机数
生成 15 位长度的数字字母组合的随机数
- (NSString *)getRandomString { static int kNumber = 15; NSString *sourceStr = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
NSMutableString *resultStr = [[NSMutableString alloc] init]; for (int i = 0; i < kNumber; i++) { NSUInteger index = arc4random() % sourceStr.length;
NSString *oneStr = [sourceStr substringWithRange:NSMakeRange(index, 1)]; [resultStr appendString:oneStr];
}
return resultStr;
}
iOS - OC NSNumber 数字的更多相关文章
- iOS - Swift NSNumber 数字
前言 public class NSNumber : NSValue public class NSDecimalNumber : NSNumber NSNumber 可以被赋值为各种数值类型.我们可 ...
- OC NSNumber NSValue
OC NSNumber NSValue iOS的集合对象不可以存储C语言基本类型,所有可以进行装箱和拆箱,来进行OC对象操作. NSNumber包装类 普通初始化 NSNumber * num1 = ...
- iOS - OC 面向对象语法
1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...
- ios+oc面试题
ios+oc面试题 浅复制和深复制的区别?//浅拷贝和深拷贝答案:浅层复制(copy):只复制指向对象的指针,而不复制引用对象本身.//通过对象的指针来访问这个对象深层复制(mutableCo ...
- iOS OC语言原生开发的IM模块--RChat
iOS OC语言原生开发的IM模块,用于项目中需要原生开发IM的情况,具备发送文字.表情.语音.图片.视频等完整功能,包含图片预览视频播放等功能,此项目将会长期更新如有问题可以提出,我的邮箱:fshm ...
- 在IOS端点击数字后会调起系统拨号界面
在IOS端点击数字后会调起系统拨号界面,解决方案: <meta name="format-detection" content="telephone=no" ...
- iOS学习14之OC NSNumber + NSValue
1.NSNumber 数值类. 作用:实现基本数据类型与OC对象类型的相互转化. 1> NSNumber创建对象 // 初始化方法 NSNumber *num1 = [[NSNumber all ...
- iOS - OC NSString 字符串
前言 @interface NSString : NSObject <NSCopying, NSMutableCopying, NSSecureCoding> @interface NSM ...
- iOS - OC Enum 枚举
前言 iOS 5.0 之后,提供了新的枚举定义方式,定义枚举的同时,可以指定枚举中数据的类型. typedef NS_OPTIONS(_type, _name) new; -> 位移的,可以使用 ...
随机推荐
- Spring使用p名称空间配置属性
给XML配置文件"减肥"的另一个选择就是使用p名称空间,从 2.0开始,Spring支持使用名称空间的可扩展配置格式.这些名称空间都是基于一种XML Schema定义.事实上,我们 ...
- WKWebView与Js实战(OC版)
前言 上一篇专门讲解了WKWebView相关的所有类.代理的所有API.那么本篇讲些什么呢?当然是实战了! 本篇文章教大家如何使用WKWebView去实现常用的一些API操作.当然,也会有如何与JS交 ...
- 为什么Redis内存不宜过大
redis这个内存数据库,它的高性能.稳定性都是不用怀疑的,但我们塞进redis的数据过多,内存过大,那如果出问题,那它可能会带给我们的就是灾难性. 作者:程超来源:网络|2016-05-23 09: ...
- GDCPC2016 省赛随笔
这是第一次参加省赛,第二次参加正式的组队赛. 昨晚很早就睡,早上挺早就睡不着醒了,内心既紧张又激动(虽然赛前和队友说尽力就好,但是还是很怕打铁啊).然后吃过早餐跟随学校大部队来到了中大.发现有好多学校 ...
- python中split函数的使用
最近学习python,对split函数做了下总结,内容如下:
- 7.进度条(ProgressBar)
默认为圆形,类似加载的样子,如果想要设置为下载的样式,可以选择它的样式为横向. style="?android:attr/progressBarStyleHorizontal" 顺 ...
- LINQ TO DATATABLE/DATASET基本操作之-简单查询
废话不说,直接贴上代码: 其中:SerchLinqData();方法查询数据并返回一个datatable表.为数据源. #region 绑定数据 public static string BindDt ...
- 20150608_Andriod 发布问题处理
参考地址: http://blog.csdn.net/cxc19890214/article/details/39120415 问题:当我们开发完成一个Android应用程序后,在发布该应用程序之前必 ...
- Finding Nemo 分类: POJ 2015-07-11 10:11 10人阅读 评论(0) 收藏
Finding Nemo Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 8117 Accepted: 1883 Desc ...
- ural 1110,快速幂
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1110 题意: X^N % M = Y,X=[0,M-1];没有输出-1: #incl ...