cocos2d / Xcode应用程序(iOS 7.0)中字符串长度> 10的未知整数转换

时间:2013-12-08 16:11:44

标签: cocos2d-iphone ios7 integer

我正在使用cocos2d 2.0和iOS7.0。在尝试获取长度较大的字符串的整数值或浮点值(通常> 10)时,我总是得到一些未知的输出,如下所示:

当字符串长度< = 10:

    NSString *amount = @"1234567890";
    NSLog(@"AmountStr=|%@|",amount);
    NSLog(@"Amount   =|%d|",[amount integerValue]); 

输出(获得正确的整数值):

  AmountStr=|1234567890|
  Amount   =|1234567890| -- 

但是,当字符串长度> 10时,即:

    NSString *amount = @"12345678901"; -- added a '1' after the string, so length = 11
    NSLog(@"AmountStr=|%@|",amount);
    NSLog(@"Amount   =|%d|",[amount integerValue]);

然后我得到输出:

    AmountStr=|12345678901|  -- This is correct
    Amount   =|2147483647|   -- But what about this..!!! :O

我尝试过integerValueintValuefloatValue。每次都会发生同样的错误。那么如何找到长度大于10的字符串的int值。请帮帮我。

1 个答案:

答案 0 :(得分:3)

NSLog(@"Amount =|%lli|",[amount longLongValue]);

您尝试将数字打印为整数,该整数大于整数可容纳的最大数字。它甚至不是数字位数。尝试使用3000000000执行此操作会复制“错误”。

doubleValue还有NSString方法,它会为您提供比floatValue更重要的数字。

此外,使用%d来调用integerValue即使有效,我也感到有点惊讶。 intValue会返回int。但integerValue会返回NSInteger。通常,在使用NSInteger格式说明符时,您需要使用%ld并将NSInteger转换为long ...

对于最多38位数字,您始终可以使用NSDecimalNumber

NSDecimalNumber *myNum = [NSDecimalNumber decimalNumberWithString:amount];
NSLog(@"%@", [myNum descriptionWithLocale:[NSLocale systemLocale]]);