objective-c - 仅在需要时提供精确的数字 - 这可能吗?

标签 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

最佳答案

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 Precision[13359:903] 5
2011-11-17 21:52:12.624 Precision[13359:903] 0.6666666666666666
2011-11-17 21:52:12.625 Precision[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 Precision[13359:903] 5
2011-11-17 21:52:12.630 Precision[13359:903] 0.666667
2011-11-17 21:52:12.630 Precision[13359:903] 3.14159265358979

string format specifiers还允许可变精度;使用星号代替小数点后的数字:

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

关于objective-c - 仅在需要时提供精确的数字 - 这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8174735/

相关文章:

cocoa - 当二进制数据解码为 UTF-8 时会发生什么?

ios - 使用新的 Dropbox SDK (V2) 和 filesRoutes 的 downloadUrl :overwrite:destination: method 跟踪进度

ios - 对象 [2866] : pthread_rwlock_rdlock failed (11)

ios - 如何拍摄未呈现的 UIView 的快照?

c - 为什么在printf中指定为整数的char被正确打印

c - 为什么 int 在 printf 中不转换为 double?

c - sprintf() 与 argv 的行为

objective-c - 使用 SpriteKit 的 TextureAtlas 并通过 Xcode 命令行构建时,iOS 应用程序崩溃

Objective-C:NSLog 为分配给 nil 的 var 打印 (null)?

cocoa - 刷新 Cocoa-Binding - NSArrayController - ComboBox