NSString到NSNumber忽略初始零

时间:2013-04-01 12:04:56

标签: ios core-data nsstring nsnumber

我正在将NSString转换为NSNumber。但问题是,如果NSString以零开头,则将其转换为NSNumber会忽略初始零。我知道初始零并不意味着什么,但我想保留初始零,因为在我的情况下它是phonenumber。

这是我的代码:

NSLog(@"test1: %@",tempPhoneNumber);
NSNumberFormatter *formatter=[[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *tempPnoneNumberNumber=[formatter numberFromString:tempPhoneNumber];
NSLog(@"test: %@",tempPnoneNumberNumber);

如果test1:00966123456789 然后测试:966123456789

我想要两个相同的

4 个答案:

答案 0 :(得分:4)

NSNumber无法保留初始零。

如果您想保留零,请勿将其更改为NSNumber。电话号码实际上不是数字,通常保留为字符串。

另请注意,phonenumbers可以包含其他字符:+*#。这些字符通常具有特殊含义(例如,开头的+表示与00相同。)

答案 1 :(得分:2)

如果您知道一个数字必须有多少位数,您可以使用"%014lli"格式将其格式化为可选的前导零所需的位数。幻数14是所需的位数,包括前导零。以下是demo in C的链接,该{{3}}使用long long常量来表示您的号码。

P.S。电话号码不是真正的“数字”,它们是恰好由数字组成的字符串。由于前导零问题,您不应该尝试将它们精确地转换为数字。

答案 2 :(得分:1)

如果你没有用它进行计算,那么它是一个字符串,而不是一个数字。

这适用于电话号码,邮政编码等。

如果你设法存储前导零,那么有人最终会收到这个电话号码:+44(0)1234 567890 - 你将如何处理?

答案 3 :(得分:0)

有两种方法可以实现这一目标: 首先,如果您的电话号码是固定大小,那么您可以使用此

NSLog(@"test %014d", tempPnoneNumberNumber);

否则只需按

添加前导零
[formatter setPaddingCharacter:@"00"];