4

考虑一下:

NSString *whatever=[NSString stringWithFormat:@"My float: %.2f",aFloat];

aFloat构建字符串时,这会将我的小数点四舍五入到 2 位whatever

假设我希望2这个语句中的 是可分配的,这样,根据aFloatI 的值,它可能会显示 2 或 4 个小数位。我怎样才能把它建成stringWithFormat

我希望能够做到这一点,而无需if针对不同情况简单地重复整行,而是以某种方式动态地仅更改%.2f部分。

4

3 回答 3

11

正确的答案是使用 NSNumberFormatter。

但是,使用格式字符串的简单答案是使用星号说明符。根据Apple 文档,格式字符串符合IEEE printf 规范。本规范规定如下:

字段宽度或精度或两者都可以用星号 ('*') 表示。在这种情况下,int 类型的参数提供字段宽度或精度。

这意味着

int precision = 2;
NSString *whatever=[NSString stringWithFormat:@"My float: %.*f", precision,aFloat];
//                                   Asterisk in place of 2^^    ^^^^^^^^^ int variable

应该管用。我不得不说,我还没有尝试过,我倾向于使用 NSNumberFormatters。

于 2012-10-29T13:34:44.440 回答
5

您需要先构建格式:

NSInteger precision = 2;
NSString *format = [@"My float: %." stringByAppendingFormat:@"%d", precision];
format = [format stringByAppendingString:@"f"];

NSString *whatever=[NSString stringWithFormat:format, aFloat];
于 2012-10-29T13:08:09.863 回答
0

转义%%%构建格式字符串:

NSUInteger digits = aFloat > 10.0f ? 2 : 4;
NSString *format = [NSString stringWithFormat:@"My float: %%.%if", digits];
NSString *whatever = [NSString stringWithFormat:format, aFloat];
于 2012-10-29T13:08:33.647 回答