zoukankan      html  css  js  c++  java
  • iOS

    前言

    	@interface NSNumber : NSValue
    	@interface NSDecimalNumber : 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;
      	}
      
  • 相关阅读:
    用javascript写星际飞机大战游戏
    Vue源码分析之实现一个简易版的Vue
    Vue源码分析之数据驱动
    Vue源码分析之虚拟DOM
    使用HbuilderX离线打包5+APP
    ERROR in build.js from UglifyJs
    PHP 的一些开发规范
    Markdown使用TOC自动生成导航栏
    Hexo博客skapp主题部署填坑指南
    Docker 官方安装详解
  • 原文地址:https://www.cnblogs.com/QianChia/p/5782747.html
Copyright © 2011-2022 走看看