我正在使用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
我尝试过integerValue
,intValue
和floatValue
。每次都会发生同样的错误。那么如何找到长度大于10的字符串的int值。请帮帮我。
答案 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]]);