Только точное представление числа при необходимости - это возможно? - PullRequest
0 голосов
/ 18 ноября 2011

Есть ли возможность представить одну и ту же переменную с разной точностью?
Например, если я добавлю два целых числа, это будет выглядеть так:

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 Ответ

5 голосов
/ 18 ноября 2011

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

Спецификаторы формата также допускают переменную точность; используйте звездочку вместо цифры после десятичной точки:

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