前言

  • 将基本数据类型包装成 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. 【HTML代码】访问页面时,拨打页面中的电话号码

      这两天在写HTML页面今天要实现一个手机用户访问页面的时候,如果页面中有电话号码,点击可以打电话或者是发信息,之前没做过今天刚听说感觉很高大上会很难,实际上简单的让我内牛满面啊,,  小婊砸 (* ...

  2. HUD2102(基础bfs)

    A计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  3. sleep 和 usleep的实现方法

    一.sleep 和 usleep 1.不属于系统调用,是glibc 库函数实现的: 2.glibc函数库中通过调用内核的nanosleep实现的: 3.内核nanosleep通过调用 hrtimer_ ...

  4. Linux驱动 - SPI驱动 之三 SPI控制器驱动

    通过第一篇文章,我们已经知道,整个SPI驱动架构可以分为协议驱动.通用接口层和控制器驱动三大部分.其中,控制器驱动负责最底层的数据收发工作,为了完成数据的收发工作,控制器驱动需要完成以下这些功能:1. ...

  5. Java基础--单例类创建和测试

    单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在.单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间:能够避免由于操作多个实例导致 ...

  6. java代码,用continue写出偶数

    总结:不满足条件时,输出当前==== package com.b; import java.util.Scanner; //用continue写出偶数的代码是: public class twe { ...

  7. 分布式锁之一:zookeeper分布式锁1

    zookeeper集群的每个节点的数据都是一致的, 那么我们可以通过这些节点来作为锁的标志. 首先给锁设置一下API, 至少要包含, lock(锁住), unlock(解锁), isLocked(是否 ...

  8. postgresql 模式与用户,及跨库访问

    1 控制台命令\h:查看SQL命令的解释,比如\h select.\?:查看psql命令列表.\l:列出所有数据库.\c [database_name]:连接其他数据库.\d:列出当前数据库的所有表格 ...

  9. 侯捷STL学习(八)-- 深度探索deque

    layout: post title: 侯捷STL学习(八) date: 2017-07-19 tag: 侯捷STL --- 第十八节 深度探索deque上 duque内存结构 分段连续,用户看起来是 ...

  10. CSS3新特性详解

    本文讲解CSS3相关实用知识点 CSS3相关实用知识点目录 边框设置 颜色设置 背景设置 渐变使用 超出文本设置 阴影设置 CSS3变换设置 过渡设置 动画设置 多列布局 BoxSizing设置 弹性 ...