Objective c 动态格式化NSString中的浮点

Objective c 动态格式化NSString中的浮点,objective-c,nsstring,Objective C,Nsstring,考虑这一点: NSString*whatever=[NSString stringWithFormat:@“我的浮点:%.2f”,浮点] 这将在构建字符串无论什么 假设我希望此语句中的2是可赋值的,这样,基于aFloat的值,我可以让它显示2或4位小数。如何将其构建到stringWithFormat 我希望能够做到这一点,而不需要一个只在不同情况下重复整行的if,而是以某种方式动态更改%.2f部分。您需要首先构建格式: NSInteger precision = 2; NSString *for

考虑这一点:

NSString*whatever=[NSString stringWithFormat:@“我的浮点:%.2f”,浮点]

这将在构建字符串
无论什么

假设我希望此语句中的
2
是可赋值的,这样,基于
aFloat
的值,我可以让它显示2或4位小数。如何将其构建到
stringWithFormat


我希望能够做到这一点,而不需要一个只在不同情况下重复整行的
if
,而是以某种方式动态更改
%.2f
部分。

您需要首先构建格式:

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

NSString *whatever=[NSString stringWithFormat:format, aFloat];

%%
转义为
%%
以生成格式字符串:

NSUInteger digits = aFloat > 10.0f ? 2 : 4;
NSString *format = [NSString stringWithFormat:@"My float: %%.%if", digits];
NSString *whatever = [NSString stringWithFormat:format, aFloat];

正确的答案是使用NSNumberFormatter

但是,使用格式字符串的简单答案是使用星号说明符。根据n,格式字符串符合。本规范规定了以下内容:

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

这意味着

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

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

只需使用第二个
+stringWithFormat:
调用动态构造字符串?