2011-11-17 20 views
0

是否有可能以不同的精度呈現相同的變量?
例如,如果我提出兩個整數相加的,它會像:只有在需要的時候才能提供精確的數字 - 有可能嗎?

result = 2+3; 
NSLog(@"%.0f", result); 

但一個部門它會像:

result = 2/3; 
NSLog(@"%.1f", result); 

雖然呈現π(圓周率),它會像:

result = M_PI; 
NSLog(@"%.19f", result); //And it would be 3.141592653589793238 
+0

'2/3'不需要'.1f'。 –

+0

你打算如何區分你的代碼? –

回答

5

NSNumber會做一些快速和骯髒的格式爲你,

NSNumber * five = [NSNumber numberWithDouble:3+2]; 
NSNumber * twoThirds = [NSNumber numberWithDouble:2/3.0]; 
NSNumber * mPi = [NSNumber numberWithDouble:M_PI]; 

NSLog(@"%@", [five stringValue]); 
NSLog(@"%@", [twoThirds stringValue]); 
NSLog(@"%@", [mPi stringValue]); 

2011-11-17 21:52:12.621精密[13359:903] 5
2011-11-17 21:52:12.624精密[13359:903] 0.6666666666666666
2011-11- 17 21:52:12.625精密[13359:903] 3.141592653589793

,但你確實應該使用NSNumberFormatter

NSNumberFormatter * formatter = [[NSNumberFormatter alloc] init]; 

[formatter setUsesSignificantDigits:YES]; 

NSLog(@"%@", [formatter stringFromNumber:five]); 
NSLog(@"%@", [formatter stringFromNumber:twoThirds]); 

[formatter setMaximumSignificantDigits:16]; 
NSLog(@"%@", [formatter stringFromNumber:mPi]); 

2011-11-17 21:52:12.629精密度[13359:903] 5
2011-11-17 21:52:12.630精度[13359:903] 0.666667
2011-11-17 21:52:12.630精度[13359:903] 3.14159265358979

string format specifiers也允許變精度;小數點後用星號代替數字:

int precision = 3; 
NSLog(@"%.*f", precision, 2/3.0); 
相關問題