前言

  • 将基本数据类型包装成 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数字的更多相关文章

  1. iOS - OC NSNumber 数字

    前言 @interface NSNumber : NSValue @interface NSDecimalNumber : NSNumber 将基本数据类型包装成 OC 对象 1.NSNumber 与 ...

  2. iOS - Swift NSNumber 数字

    前言 public class NSNumber : NSValue public class NSDecimalNumber : NSNumber NSNumber 可以被赋值为各种数值类型.我们可 ...

  3. OC基础:NSString NSNumber 分类: ios学习 OC 2015-06-17 17:55 77人阅读 评论(0) 收藏

    OC中的基本数据类型 NSString  在64位系统下,相当于long,在非64位系统下,想当于int. CGFloat   在64位系统下,相当于double,在非64位系统之下,想当与float ...

  4. iPhone开发视频教程 Objective-C部分 (51课时)

    第一.二章  OC基础语法 iPhone开发教程 第一章 OC基础语法  iPhone开发概述-必看(1.1)http://www.apkbus.com/android-102215-1-1.html ...

  5. OC基础(21)

    Foundation框架介绍 NSString基本概念 字符串读写 字符串比较 字符串搜索 字符串截取 字符串替换 字符串与路径 字符串与基本数据类型转换 *:first-child { margin ...

  6. OC 知识点回顾

    /* 字符串: NSString  不可变字符串  字符串对象的内容不能修改,字符串的指针可以改变 NSMutableString 可变字符串   可以修改字符串对象的内容,继承自NSString , ...

  7. (转载)iPhone开发视频教程 Objective-C部分 (51课时)

      感谢好人的无私贡献!来源:http://www.cnblogs.com/aimeng/p/3370012.html   第一.二章  OC基础语法 iPhone开发教程 第一章 OC基础语法  i ...

  8. iOS开发系统类功能划分

    0.OC语法基础 CHOCBase Object C语法学习笔记(一) Object C语法学习笔记(二) 1.UI类 自定义控件程序运行流程 setNeedsLayOut和setNeedsDispl ...

  9. CHNS类

    NS类集合介绍 1.常用部分 NSDictionary NSString NSArray 数组 NSTimer 定时器 NSRange 范围 NSNotification 2.网络相关 NSURLCo ...

随机推荐

  1. electron 安装失败解决办法

    1.安装node https://nodejs.org/en/download/2.安装镜像工具npm install -g cnpm --registry=https://registry.npm. ...

  2. 蓝桥杯 算法训练 ALGO-118 连续正整数的和

    算法训练 连续正整数的和   时间限制:1.0s   内存限制:256.0MB 问题描述 78这个数可以表示为连续正整数的和,1+2+3,18+19+20+21,25+26+27. 输入一个正整数 n ...

  3. [转]ubuntu 网络配置 作者:Yudar

    检查网络配置命令:ifconfig 一.通过配置文件配置 新手没怎么用过Ubuntu,所以走了不少弯路,网上找了很多方法,大都没对我起到帮助作用,所以把自己的配置方法写一写. Ubuntu上连了两块网 ...

  4. PV 和 UV IP

    PV(page view),即页面浏览量,或点击量;通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标. 高手对pv的解释是,一个访问者在24小时(0点到24点)内到底看了你网站几个页面.这里 ...

  5. jenkins基础知识

    修改默认端口号启动: java -jar jenkins.war --ajp13Port=-1 --httpPort=8089 一些基本的命令: http://[jenkins-server]/[co ...

  6. 关于EMGCU中的cvertern.dll无法找到的问题

    方法1:自己到EMgucv目录的bin里面拷贝x86文件夹到自己程序的debug目录 方法2:将这个X86目录添加到PATH变量,记得要注销,否则新添加的无法起作用,VS2010还显示无法找到.

  7. curl的特殊使用

    1.php可以通过shell_exec()和其他系统函数使用curl,也可用PHP带的libcurl库. $curl = curl_init("wwww.baidu.com"); ...

  8. [poj3041]Asteroids(二分图的最小顶点覆盖)

    题目大意:$N*N$的网格中有$n$颗行星,若每次可以消去一整行或一整列,求最小的攻击次数使得消去所有行星. 解题关键:将光束当做顶点,行星当做连接光束的边建图,题目转化为求该图的最小顶点覆盖,图的最 ...

  9. 【转】nginx的模块变量(HTTP核心模块变量)

    nginx的HTTP核心模块引入了大量的变量,可以在指定范围内使用这些变量的值,可以分为三类:一是客户请求头中发送的变量.二是服务器端响应头中的变量,第三是nginx产生的各种变量,我们可以使用$变量 ...

  10. R: plot 绘图各种参数,以及 legend。。

    ################################################### 问题:基础绘图plot   18.4.30 plot函数,基础绘图的各个参数? 解决方案: ca ...