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;
}
NSNumber数字的更多相关文章
- iOS - OC NSNumber 数字
前言 @interface NSNumber : NSValue @interface NSDecimalNumber : NSNumber 将基本数据类型包装成 OC 对象 1.NSNumber 与 ...
- iOS - Swift NSNumber 数字
前言 public class NSNumber : NSValue public class NSDecimalNumber : NSNumber NSNumber 可以被赋值为各种数值类型.我们可 ...
- OC基础:NSString NSNumber 分类: ios学习 OC 2015-06-17 17:55 77人阅读 评论(0) 收藏
OC中的基本数据类型 NSString 在64位系统下,相当于long,在非64位系统下,想当于int. CGFloat 在64位系统下,相当于double,在非64位系统之下,想当与float ...
- iPhone开发视频教程 Objective-C部分 (51课时)
第一.二章 OC基础语法 iPhone开发教程 第一章 OC基础语法 iPhone开发概述-必看(1.1)http://www.apkbus.com/android-102215-1-1.html ...
- OC基础(21)
Foundation框架介绍 NSString基本概念 字符串读写 字符串比较 字符串搜索 字符串截取 字符串替换 字符串与路径 字符串与基本数据类型转换 *:first-child { margin ...
- OC 知识点回顾
/* 字符串: NSString 不可变字符串 字符串对象的内容不能修改,字符串的指针可以改变 NSMutableString 可变字符串 可以修改字符串对象的内容,继承自NSString , ...
- (转载)iPhone开发视频教程 Objective-C部分 (51课时)
感谢好人的无私贡献!来源:http://www.cnblogs.com/aimeng/p/3370012.html 第一.二章 OC基础语法 iPhone开发教程 第一章 OC基础语法 i ...
- iOS开发系统类功能划分
0.OC语法基础 CHOCBase Object C语法学习笔记(一) Object C语法学习笔记(二) 1.UI类 自定义控件程序运行流程 setNeedsLayOut和setNeedsDispl ...
- CHNS类
NS类集合介绍 1.常用部分 NSDictionary NSString NSArray 数组 NSTimer 定时器 NSRange 范围 NSNotification 2.网络相关 NSURLCo ...
随机推荐
- maven 历史版本下载
1.登录http://maven.apache.org/download.cgi 2.拉倒最下面,点击 archives 3.可以看到maven个版本,找自己需要的下载
- Azure VM从ASM迁移到ARM(一)
Azure的IaaS有ASM和ARM两个版本,ARM的一些优点前面已经聊过很多了.ARM有更细的管理颗粒度,更多的功能等. 如果想从ASM迁移到ARM,目前有两类方法可以实现: 1. Azure平台支 ...
- 【转】Flash AS3 保存图片到本地
核心提示:如果你想保存从视频,图表或表格中获取的图片数据到本地,可以使用BitmapData类. 原文地址: http://www.adobe.com/cfusion/communityeng ...
- 备注信息的textarea 和 数据库 text类型
有时候需要用到备注信息 备注一些东西 但是它又不同于普通的输入框,要有换行啊 空格之类的,更有甚者还有其他更多的需求 1.更多需求 用富文本编辑器 2.普通需求 直接用input type=" ...
- 使用HibernateTemplate手写源生SQL的【增删改查】 操作
使用 HibernateTemplate 进行持久化操作 执行的时候不报错,但数据库的持久化操作没有一点作用,问了好多人,说没有声明事务和提交事务, 用的是别人搭的的架构,事务已经有了,自动提交事务的 ...
- PCIe相关的操作命令
1.lspci --显示列举系统目前的pcie设备 43:00.0 Class 0004: Device 104c:b800 (rev 01) //netra设备 设备编号 ...
- 机器学习:多项式回归(scikit-learn中的多项式回归和 Pipeline)
一.scikit-learn 中的多项式回归 1)实例过程 模拟数据 import numpy as np import matplotlib.pyplot as plt x = np.random. ...
- DCloud-MUI:HBuilder 安装
ylbtech-DCloud-MUI:HBuilder 安装 1.返回顶部 1. 2. 3. 4. 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 7.返 ...
- jenkins学习 02 jenkins安装与配置
1: Jenkins安装 在最简单的情况下,Jenkins 只需要两个步骤: (1)下载最新的版本(一个 WAR 文件).Jenkins官方网址: http://Jenkins-ci.org/ (2 ...
- Git命令之创建版本
安装 安装好Git后,将会在桌面生成 这样一个图标 运行后将会是类似控制台程序的黑色窗口,其中mingw64(参考百度百科).这样的话就可以在输入命令 例如 :git 见到下图有详细的用法表示成功否则 ...