【问题标题】:Construct a dynamic formatting string, for fixed width float values构造一个动态格式化字符串,用于固定宽度的浮点值
【发布时间】:2012-03-26 22:13:38
【问题描述】:

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

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

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

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

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

这些解决方案听起来很可怕,而且似乎效率很低,但也许这些是我拥有的最佳选择。

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

【问题讨论】:

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


【解决方案1】:

这对我来说听起来并不可怕低效。

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

其实我觉得它相当优雅的。

【讨论】:

    【解决方案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]]]
    

    【讨论】:

      猜你喜欢
      • 2012-01-15
      • 1970-01-01
      • 2018-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-11
      相关资源
      最近更新 更多