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:
调用动态构造字符串?