考虑一下:
NSString *whatever=[NSString stringWithFormat:@"My float: %.2f",aFloat];
在构建字符串aFloat
whatever
四舍五入到小数点后2位
假设我希望此语句中的2
可以赋值,这样,根据aFloat
的值,我可能会显示2或4个小数位。如何将其构建为stringWithFormat
?
我希望能够在没有if
的情况下做到这一点,%.2f
只是为不同的情况重复整行,而是以某种方式动态地改变{{1}}部分。
答案 0 :(得分:10)
正确的答案是使用NSNumberFormatter。
但是,使用格式字符串的简单答案是使用星号说明符。根据{{3}} n,格式字符串符合Apple documentatio。该规范说明如下:
字段宽度或精度或两者都可以用星号('*')表示。在这种情况下,int类型的参数提供字段宽度或精度。
这意味着
int precision = 2;
NSString *whatever=[NSString stringWithFormat:@"My float: %.*f", precision,aFloat];
// Asterisk in place of 2^^ ^^^^^^^^^ int variable
应该有效。我不得不说,我还没试过,我倾向于使用NSNumberFormatters。
答案 1 :(得分:5)
您需要先构建格式:
NSInteger precision = 2;
NSString *format = [@"My float: %." stringByAppendingFormat:@"%d", precision];
format = [format stringByAppendingString:@"f"];
NSString *whatever=[NSString stringWithFormat:format, aFloat];
答案 2 :(得分:0)
将%
转义为%%
以构建格式字符串:
NSUInteger digits = aFloat > 10.0f ? 2 : 4;
NSString *format = [NSString stringWithFormat:@"My float: %%.%if", digits];
NSString *whatever = [NSString stringWithFormat:format, aFloat];