【问题标题】:NSString to NSNumber ignores initial zerosNSString 到 NSNumber 忽略初始零
【发布时间】:2013-04-01 12:04:56
【问题描述】:

我正在将NSString 转换为NSNumber。但问题是如果NSString 以零开头,那么将其转换为NSNumber 会忽略初始零。我知道初始零没有任何意义,但我想保留初始零,因为在我的情况下它是电话号码。

这是我的代码:

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

如果测试1:00966123456789 然后测试:966123456789

我想要两个一样

【问题讨论】:

  • 我不认为你可以用前导零保存数字..

标签: ios core-data nsstring nsnumber


【解决方案1】:

NSNumber 不能保留初始零。

如果您想保留零,不要将其转换NSNumber。电话号码实际上不是数字,通常保存为字符串。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      如果您确实设法存储了前导零,那么最终会有人提供以下电话号码:+44 (0)1234 567890 - 您将如何处理?

      【讨论】:

        【解决方案4】:

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

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

        否则只需添加前导零

        [formatter setPaddingCharacter:@"00"];
        

        【讨论】:

          猜你喜欢
          • 2021-04-29
          • 2013-03-22
          • 1970-01-01
          • 2012-05-18
          • 2017-01-03
          • 1970-01-01
          • 2017-01-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多