动态格式化NSString中的浮点数

joh*_*ers 3 objective-c nsstring

考虑一下:

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

这将使我aFloat在构建字符串时将其舍入到2位小数whatever

假设我希望2in this语句可以赋值,这样根据aFloatI 的值可能会显示2或4个小数位.我该如何构建它stringWithFormat

我希望能够做到这一点,而不是if简单地为不同的情况重复整行,而是以某种方式动态地改变%.2f部分.

Jer*_*myP 10

正确的答案是使用NSNumberFormatter.

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

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

这意味着

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

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


rck*_*nes 5

您需要首先构建格式:

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

NSString *whatever=[NSString stringWithFormat:format, aFloat];
Run Code Online (Sandbox Code Playgroud)