在NSString中填充数字

时间:2011-08-15 10:42:22

标签: objective-c cocoa-touch cocoa nsstring

我有一个int,比如说45.我希望从这个int填充NSString用4个零填充。结果将是:@"0045"。类似,如果int为9,我想得到:@"0009"

我知道我可以计算数字位数,然后从我想要填充的零数中减去它,并将该数字添加到字符串中,但是有更优雅的方式吗?感谢。

3 个答案:

答案 0 :(得分:36)

试试这个:

NSLog(@"%04d", 45);
NSLog(@"%04d", 9);

如果有效,那么您可以使用

获取填充号码
NSString *paddedNumber = [NSString stringWithFormat:@"%04d", 45];
NSString *otherPaddedNumber = [NSString stringWithFormat:@"%04d", 9];

<强>更新

如果您想拥有任意数字,则必须为您的格式创建格式:

// create "%04d" format string
NSString *paddingFormat = [NSString stringWithFormat:@"%%0%dd", 4];

// use it for padding numbers
NSString *paddedNumber = [NSString stringWithFormat:paddingFormat, 45];
NSString *otherPaddedNumber = [NSString stringWithFormat:paddingFormat, 9];

更新2

请参阅@ Ibmurai关于如何使用NSLog正确填充数字的评论。

答案 1 :(得分:20)

请原谅我用已经接受的答案回答这个问题,但答案(在更新中)是不是最佳解决方案。

如果您想拥有任意数字,必须为您的格式创建格式,因为IEEE printf支持此格式。而是做:

NSString *paddedNumber = [NSString stringWithFormat:@"%0*d", 4, 45];
NSString *otherPaddedNumber = [NSString stringWithFormat:@"%0*d", 4, 9];

虽然另一种解决方案有效,但它不那么有效和优雅。

来自IEEE printf规范:

  

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

答案 2 :(得分:1)

作为Int扩展的Swift版本(人们可能希望为该方法提供更好的名称):

extension Int
{
    func zeroPaddedStringValueForFieldWidth(fieldWidth: Int) -> String
    {
        return String(format: "%0*d", fieldWidth, self)
    }
}

示例:

print( 45.zeroPaddedStringValueForFieldWidth(4) ) // prints "0045"
print( 9.zeroPaddedStringValueForFieldWidth(4) ) // prints "0009"