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

发布于 2024-12-16 22:37:01 字数 330 浏览 3 评论 0原文

是否有可能以不同的精度呈现相同的变量?
例如,如果我要呈现两个整数的加法,它会像:

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

Is there a possibility to present the same variable in different precisions?
For example, if I'm presenting an addition of two integers, it would be like:

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

but with a division it would be like:

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

Although presenting the π (pi) it would be like:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

属性 2024-12-23 22:37:01

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

NSNumber will do some quick-and-dirty formatting for you,

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

but you should really use an 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

The string format specifiers also allow variable precision; use an asterisk instead of a digit after the decimal point:

int precision = 3;
NSLog(@"%.*f", precision, 2/3.0);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文