前言

  • 将基本数据类型包装成 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. 日志收集系统搭建-BELK

    前言 日志是我们分析系统运行情况.问题定位.优化分析等主要数据源头.目前,主流的业务系统都采用了分布式.微服务的形式.如果想要查看日志,就需要从不同的节点上去查看,而且对于整个业务链路也非常不清晰.因 ...

  2. CEF源码编译

    CEF的构造说明:https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding chromium的源码地址:https://c ...

  3. DIDAO.Common --- 项目中的常用类及其中函数

    常用函数: CommonHelper.cs using System; using System.Collections.Generic; using System.IO; using System. ...

  4. JAVA 正则表达式 Regex

    //正则表达式,去掉空格.换行.制表位 public static void replaceBlank(){ Pattern p = Pattern.compile("\\s*|\t|\r| ...

  5. Java基础--CountDownLatch

    CountDownLatch是线程同步辅助类,它允许一个或多个线程wait直到countdown被调用使count为0. CountDownLatch是在java1.5被引入,存在于java.util ...

  6. PostgreSQL 管理数据库

    管理数据库每个正在运行的PostgreSQL 服务器实例都管理着一个或多个数据库.因此,在组织SQL对象(“数据库对象”)的层次中,数据库位于最顶层. 本章描述数据库的属性,以及如何创建.管理.删除它 ...

  7. 侯捷STL学习(二)--序列容器测试

    第六节:容器之分类和各种测试(四) stack不提供iterator操作,破坏了容器的独特性,先进先出. 使用容器multiset(允许元素重复) 内部是红黑树,insert操作就保证了排好了序. 标 ...

  8. IEEE 2012 PHM数据挑战赛

    Sutrisno E, Oh H, Vasan A S S, et al. Estimation of remaining useful life of ball bearings using dat ...

  9. 窗体的keypreview属性的作用是什么?(设置快捷键和钩子)

    如果把窗体的KeyPreview属性设为True,那么窗体将比其内的控件优先获得键盘事件的激活权.比如窗体Form1和其内的文本框Text1都准备响应KeyPress事件,那么以下代码将首先激活窗体的 ...

  10. CH 4302 Interval GCD

    辗转相减法的扩展 $gcd(x, y, z) = gcd(x, y - x, z - y)$ 当有n个数时也成立 所以构造$a_{i}$的差分数组$b_{i} = a_{i} - a_{i - 1}$ ...