动态格式化NSString中的浮点数

时间:2012-10-29 13:02:01

标签: objective-c nsstring

考虑一下:

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

在构建字符串aFloat

时,这会将whatever四舍五入到小数点后2位

假设我希望此语句中的2可以赋值,这样,根据aFloat的值,我可能会显示2或4个小数位。如何将其构建为stringWithFormat

我希望能够在没有if的情况下做到这一点,%.2f只是为不同的情况重复整行,而是以某种方式动态地改变{{1}}部分。

3 个答案:

答案 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];