我有一个包含各种类型数值的类。在这个类中,我有几个辅助方法,用于输出描述符文本以便在我的应用程序中显示。
此描述符文本应始终显示为整数或浮点数,具体取决于特定实例的定义。
该类有一个属性DecimalWidth
,我用它来确定要显示的小数位数。我需要帮助编写显示数值的代码行,但是具有固定的小数位数(0是可能的,在这种情况下,该值应显示为整数。)
我知道我可以返回[NSString stringWithFormat:@"%.02f", self.Value]
之类的值,但我的问题是我需要将格式字符串中的'2'替换为DecimalWidth
的值。
我可以想到解决这个问题的几种方法。我可以将一个字符串连接在一起,这是输出字符串行的格式字符串。或者,我可以在格式字符串中创建格式字符串。
这些解决方案听起来很可怕,看起来效率很低,但也许这些都是我最好的选择。
是否有一种优雅的方法来构造动态格式化字符串,其中输出是固定的十进制宽度数,但指定的十进制宽度是动态的?
答案 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]]]