【问题标题】:Only present number with precision if needed - is it possible?如果需要,只提供精确的数字 - 可能吗?
【发布时间】:2011-11-17 21:40:58
【问题描述】:

是否有可能以不同的精度表示相同的变量?
例如,如果我提出两个整数相加,它会是这样的:

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

【问题讨论】:

  • 您打算如何区分代码中的那些?

标签: objective-c cocoa printf precision nslog


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多