【发布时间】:2011-10-27 04:49:31
【问题描述】:
我有一个 int,例如 45。我想从这个用 4 个零填充的 int 中获取 NSString。所以结果将是:@"0045"。类似的,如果int为9,我想得到:@"0009"。
我知道我可以计算位数,然后从我想要填充的零中减去它,然后将该数字添加到字符串中,但是有更优雅的方法吗?谢谢。
【问题讨论】:
标签: objective-c cocoa-touch cocoa nsstring
我有一个 int,例如 45。我想从这个用 4 个零填充的 int 中获取 NSString。所以结果将是:@"0045"。类似的,如果int为9,我想得到:@"0009"。
我知道我可以计算位数,然后从我想要填充的零中减去它,然后将该数字添加到字符串中,但是有更优雅的方法吗?谢谢。
【问题讨论】:
标签: objective-c cocoa-touch cocoa nsstring
试试这个:
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 正确填充数字的评论。
【讨论】:
请原谅我用一个已被接受的答案来回答这个问题,但答案(在更新中)不是最好的解决方案。
如果您想要一个任意数字,您不必必须为您的格式创建格式,因为IEEE printf 支持这一点。而是这样做:
NSString *paddedNumber = [NSString stringWithFormat:@"%0*d", 4, 45];
NSString *otherPaddedNumber = [NSString stringWithFormat:@"%0*d", 4, 9];
虽然其他解决方案有效,但它的效果和优雅度较低。
来自 IEEE printf 规范:
字段宽度或精度或两者都可以用星号 ('*') 表示。在这种情况下,int 类型的参数提供字段宽度或精度。
【讨论】:
作为 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"
【讨论】: