目前个人XCode版本是7.2的。下面是个人测试代码: 测试
CGFloat width = [UIScreen mainScreen].bounds.size.width; CGFloat height = [UIScreen mainScreen].bounds.size.height; NSLog(@"width :%f,height: %f", width, height); NSNumber *numberWidth = [NSNumber numberWithFloat:width]; NSNumber *numberHeight = [NSNumber numberWithFloat:height]; NSLog(@"numberHeight :%@, numberWidth :%@", numberHeight, numberWidth); NSString *stringHeight = [NSString stringWithFormat:@"%f", height]; NSString *stringWidth = [NSString stringWithFormat:@"%f", width]; NSLog(@"stringHeight :%@, stringWidth :%@", stringHeight, stringWidth); CGFloat fromNumberWidth = [numberWidth floatValue]; NSLog(@"fromNumberWidth : %f", fromNumberWidth); CGFloat floatTest = 120.234567; NSNumber *numberFloatTest = [NSNumber numberWithFloat:floatTest]; CGFloat fromNumberfloatTest = [numberFloatTest floatValue]; NSLog(@"numberFloatTest is %f", [numberFloatTest floatValue]); NSLog(@"floatTest:%f, numberFloatTest:%@, fromNumberfloatTest:%f", floatTest, numberFloatTest, fromNumberfloatTest); //输出: floatTest:120.234567, numberFloatTest:120.2346, fromNumberfloatTest:120.234566 #warning 怎么搞得呢? NSNumber *a = [NSNumber numberWithFloat:256.379157]; NSLog(@"a : %@", a); NSLog(@"float is %f",[a floatValue]); NSLog(@"float is %.4f",[a floatValue]); NSLog(@"float is %.5f",[a floatValue]);
width :320.000000,height: 568.000000 spa
numberHeight :568, numberWidth :320 code
stringHeight :568.000000, stringWidth :320.000000 orm
fromNumberWidth : 320.000000 对象
numberFloatTest is 120.234566 string
floatTest:120.234567, numberFloatTest:120.2346, fromNumberfloatTest:120.234566 it
a : 256.3792 class
float is 256.379150 float
float is 256.3792 im
float is 256.37915
从输出结果能够看出,
CGFloat转化成NSString,CGFloat形式的输出是什么样的,NSString对象输出的也是什么样的,把NSString对象转化回CGFloat对象也仍是原来的CGFloat对象。CGFloat转化成NSString精度不会改变的。数值彻底不会变。
而CGFloat转化成NSNumber,若是是小数点后为0的,到了NSNumber对象时就不显示小数点后的了,但再把NSNumber对象转化成CGFloat,就又转化成有小数点的了,能够说基本没有影响。
问题是,若是小数点后不为0,像上面的
CGFloat floatTest = 120.234567
这个转化为NSNumber后输出就不正常了,
floatTest:120.234567, numberFloatTest:120.2346, fromNumberfloatTest:120.234566
这一行输出结果能够很明显的看出变化了,不明白为何小数点后保留了4位,而且用的四舍五入,再由NSNumber转化为CGFloat则不是原来的值了。
对比最后4行代码和最后4行输出,当转化为NSNumber输出时,小数点后仍然保留的是4位,而且用的四舍五入,再由NSNumber转化为CGFloat时,也已经不是原来的值了,若是以4位精度输出的话,与NSNumber的结果是一致的,而若是是5位精度的话,显然不正确,若是是6为所有输出,结果仍是不正确的。不知道到底怎么回事,望知道的大神帮解答一下。
总之,我看出来的就是NSNumber就保留小数点后4位,按四舍五入法保留,其他位数的可能不精确。