我有一个int,比如说45.我希望从这个int填充NSString用4个零填充。结果将是:@"0045"
。类似,如果int为9,我想得到:@"0009"
。
我知道我可以计算数字位数,然后从我想要填充的零数中减去它,并将该数字添加到字符串中,但是有更优雅的方式吗?感谢。
答案 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"