为固定宽度浮点值构造动态格式化字符串

时间:2012-03-26 22:13:39

标签: objective-c cocoa-touch nsstring string-formatting

我有一个包含各种类型数值的类。在这个类中,我有几个辅助方法,用于输出描述符文本以便在我的应用程序中显示。

此描述符文本应始终显示为整数或浮点数,具体取决于特定实例的定义。

该类有一个属性DecimalWidth,我用它来确定要显示的小数位数。我需要帮助编写显示数值的代码行,但是具有固定的小数位数(0是可能的,在这种情况下,该值应显示为整数。)

我知道我可以返回[NSString stringWithFormat:@"%.02f", self.Value]之类的值,但我的问题是我需要将格式字符串中的'2'替换为DecimalWidth的值。

我可以想到解决这个问题的几种方法。我可以将一个字符串连接在一起,这是输出字符串行的格式字符串。或者,我可以在格式字符串中创建格式字符串。

这些解决方案听起来很可怕,看起来效率很低,但也许这些都是我最好的选择。

是否有一种优雅的方法来构造动态格式化字符串,其中输出是固定的十进制宽度数,但指定的十进制宽度是动态的?

2 个答案:

答案 0 :(得分:5)

对我来说,这听起来不那么可怕

[NSString stringWithFormat:[NSString stringWithFormat:@"%%.%df", DecimalWidth], self.Value]

事实上,我认为 相当优雅。

答案 1 :(得分:2)

然而,问题的一个解决方案肯定是@lulius caesar提出的问题, 但是一个好方法也是使用NSNumberFormatter。下面是一个示例代码,可用于生成具有固定十进制数的

的十进制值
    NSNumberFormatter *numberFormatter=[[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
    [numberFormatter setMinimumFractionDigits:DecimalWidth];
    [numberFormatter setMaximumFractionDigits:DecimalWidth];
    NSString * decimalString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:self.value]]]