前言

  • 将基本数据类型包装成 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. CS231n笔记列表

    课程基础1:Numpy Tutorial 课程基础2:Scipy Matplotlib 1.1 图像分类和Nearest Neighbor分类器 1.2 k-Nearest Neighbor分类器 1 ...

  2. 差分IO标准

    差分标准 和单端IO不同的是,差分电平使用两根信号线来传达信号,这两根信号线在传输过程中如果遇到同样的噪声源(共模噪声)干扰,在接收端,这样的共模噪声会在两个信号相减时消除,这样并不会给接收电平造成影 ...

  3. java代码分解质因数

    总结: 循环...首位 逻辑要清晰 很简单.首先质因数最小的2.因为1不是质数 然后当输入的数刚好为2时,结束.不用下一步了.否则在循环里不停的输出一个数, 当输入的数比2大时,分能被2整除和不能被2 ...

  4. java流类共享篇

    总结: package com.aini; import java.io.*; import java.util.StringBuffere; public class tyt { public st ...

  5. ThreadPoolExecutor的corePoolSize和maximumPoolSize

    按照JDK文档的描述, 如果池中的实际线程数小于corePoolSize,无论是否其中有空闲的线程,都会给新的任务产生新的线程 如果池中的线程数>corePoolSize and <max ...

  6. Git学习笔记(三)远程库(GitHub)协同开发,fork和忽略特殊文件

    远程库 远程库,通俗的讲就是不再本地的git仓库!他的工作方式和我们本地的一样,但是要使用他就需要先建立连接! 远程库有两种,一个是自己搭建的git服务器:另一种就是使用GitHub,这个网站就是提供 ...

  7. springJunit测试

    ; m.setModelType(s); m.setModelUrlType(s); modelService.create(m); } }   来源: http://enki-ding-yeah-n ...

  8. PAT-l3-002堆栈

    L3-002. 堆栈 大家都知道“堆栈”是一种“先进后出”的线性结构,基本操作有“入栈”(将新元素插入栈顶)和“出栈”(将栈顶元素的值返回并从堆栈中将其删除).现请你实现一种特殊的堆栈,它多了一种操作 ...

  9. 2018 - Start Up

    转眼2017已经过去,从大四下学期出来实习,到现在工作一年多了,很遗憾没有经营好自己博客园&CSDN. 献上一篇鼓励工程师写blog的博客:https://kb.cnblogs.com/pag ...

  10. Vbs 脚本编程简明教程之一

    —为什么要使用 Vbs ? 在 Windows 中,学习计算机操作也许很简单,但是很多计算机工作是重复性劳动,例如你每周也许需要对一些计算机文件进行复制.粘贴.改名.删除,也许你每天启动 计算机第一件 ...