目前個人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位,按四捨五入法保留,其他位數的可能不精確。