【问题标题】:How to break apart an integer?如何拆分整数?
【发布时间】:2011-11-22 05:43:32
【问题描述】:

假设我有一个整数,例如 2,734,465,它被称为 intOne。我如何“分解”那个整数,以便我可以将数字放入 7 个 UILabel 中?因此,在第一个标签中我将有 2,然后在第二个标签中我将有 7,依此类推。我该怎么做?感谢您的帮助!

【问题讨论】:

  • 只是我一直想知道的……这也是一种分析构成整数的数字的方法。
  • 如果您想更直接地处理它(而不是穿梭于 UI 控件),请考虑重复使用除法和模数。例如。 stackoverflow.com/questions/66107/…

标签: iphone objective-c ios ipad integer


【解决方案1】:

使用类似的东西将其转换为字符串

NSString *intString = [NSString stringWithFormat:@"%d", myInt];

然后你就可以取出单个字符了:

myChar = [intString characterAtIndex: i];

【讨论】:

    【解决方案2】:

    这是一种不同的方法。这将创建一个数组,其元素是单个数字(如果为负,则前面的“-”):

    #import <Foundation/Foundation.h>
    
    NSArray* brokenArrayWithInt(NSInteger intOne) {
        NSMutableArray *result = [[[NSMutableArray alloc] init] autorelease];
        BOOL isNegative = NO;
        if (intOne < 0) {
            isNegative = YES;
            intOne = -intOne;
        }
        do {
            [result insertObject:[NSNumber numberWithInteger:intOne % 10] atIndex:0];
            intOne /= 10;
        } while (intOne > 0);
    
        if (isNegative) {
            [result insertObject:@"-" atIndex:0];
        }
        return result;
    }
    
    int main (int argc, const char * argv[]) {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    
        NSArray *brokenArray = brokenArrayWithInt(2734465);
        NSLog(@"Array: %@", brokenArray);
        brokenArray = brokenArrayWithInt(-2734465);
        NSLog(@"Array: %@", brokenArray);
        brokenArray = brokenArrayWithInt(0);
        NSLog(@"Array: %@", brokenArray);
        [pool drain];
        return 0;
    }
    

    结果如下:

    Running…
    2011-09-21 12:28:52.531 so7505138[6739:a0f] Array: (
        2,
        7,
        3,
        4,
        4,
        6,
        5
    )
    2011-09-21 12:28:52.533 so7505138[6739:a0f] Array: (
        "-",
        2,
        7,
        3,
        4,
        4,
        6,
        5
    )
    2011-09-21 12:28:52.533 so7505138[6739:a0f] Array: (
        0
    )
    

    【讨论】:

      【解决方案3】:

      得到字符串后,你还可以使用:

       NSString *keyStr = [intString substringWithRange:NSMakeRange (i, j)];
      

      直接获取子串

      作为字符串操作的替代方法,这是您在数学上将数字 n 分开的方法:

       int n = 1357246;
          int digit;
          int divisor;
          for (int i = log10(n); i> 0; i--) {
              divisor = pow(10,i);
      
              digit = n / divisor;
              n = n - digit*divisor;
              NSLog(@"%i ",digit);
          }
            NSLog(@"%i ",n);
      

      【讨论】:

        【解决方案4】:

        这取决于您是否希望数字选择相关区域设置的特定格式,例如千位分隔符和小数点。如果这样做,则将其转换为字符串,然后按照其他人的建议提取字符。

        如果你想得到每个十进制数字的值,那么你除以模 10、100、1000 等,从小于总值的 10 的幂开始(例如,对于 213,从 100 开始,然后是 10 , 然后 1)

        【讨论】:

          【解决方案5】:

          将整数转换为字符串 - 然后使用一种方法将字符串拆分/子字符串为 7 个字符串。或您需要的数量。在每个标签中放置一个字符串。

          [NSString stringWithFormat:@"%d", myNum];开始

          【讨论】:

          • 在 C 中将 int 转换为 NSString * 会将其变成被遗忘的指针,访问该指针会使程序崩溃
          • @bshirley,真的吗?这会使程序崩溃吗?奇怪的是我所有的应用程序仍然可以工作......
          • 您添加的编辑不是演员表。 NSString *string = (NSString *)myNum 正在转换并 int 为字符串。您的代码确实安全地将int 转换为NSString *
          猜你喜欢
          • 1970-01-01
          • 2013-05-31
          • 1970-01-01
          • 1970-01-01
          • 2013-03-21
          • 1970-01-01
          • 2010-12-26
          • 2019-10-10
          • 2017-05-23
          相关资源
          最近更新 更多