如果需要,只有精确的现有数字 - 是否可能?

时间:2011-11-17 21:40:59

标签: objective-c cocoa printf precision nslog

是否有可能在不同的精度中呈现相同的变量?
例如,如果我提出两个整数的加法,那就像是:

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

但是有一个分区就像是:

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

虽然呈现π(pi),但它会像:

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

1 个答案:

答案 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);