在NSString中填充数字

Run*_*ezz 22 cocoa cocoa-touch objective-c nsstring

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

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

Eim*_*tas 36

试试这个:

NSLog(@"%04d", 45);
NSLog(@"%04d", 9);
Run Code Online (Sandbox Code Playgroud)

如果它工作,那么你可以得到填充号码

NSString *paddedNumber = [NSString stringWithFormat:@"%04d", 45];
NSString *otherPaddedNumber = [NSString stringWithFormat:@"%04d", 9];
Run Code Online (Sandbox Code Playgroud)

更新

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

// 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];
Run Code Online (Sandbox Code Playgroud)

更新2

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

  • 为您的格式创建格式很愚蠢.只需使用[NSString stringWithFormat:@"%0*d",4,45].*,填充的长度,也指一个参数......所以4"替换"这个星. (5认同)

Ibm*_*rai 20

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

如果您想拥有任意数字,则无需为您的格式创建格式,因为IEEE printf支持此格式.相反:

NSString *paddedNumber = [NSString stringWithFormat:@"%0*d", 4, 45];
NSString *otherPaddedNumber = [NSString stringWithFormat:@"%0*d", 4, 9];
Run Code Online (Sandbox Code Playgroud)

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

来自IEEE printf规范:

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