我将电话号码格式化为易于阅读的电话号码,即(123) 123-4567
但是,当我想在代码中使用该电话号码时,我需要将该字符串解析为数字变量(例如int
)
然而,[string intValue];
不起作用 - 我在以前的项目中使用了intValue
大约一百万次,都没有问题,但是在这里,每一个字符串我传入,我得到相同的,随机int
退出:
- (int)processPhoneNumber:(NSString *)phoneNumber {
NSMutableString *strippedString = [NSMutableString stringWithCapacity:10];
for (int i=0; i<[phoneNumber length]; i++) {
if (isdigit([phoneNumber characterAtIndex:i])) {
[strippedString appendFormat:@"%c",[phoneNumber characterAtIndex:i]];
}
}
NSLog(@"clean string-- %@", strippedString);
int phoneNumberInt = [strippedString intValue];
NSLog(@"**** %d\n &i", phoneNumberInt, phoneNumberInt);
return phoneNumberInt;
}
然后我打电话给这个方法:
NSLog(@"%i", [self processPhoneNumber:self.phoneNumberTextField.text]);
我得到:2147483647
。 我为此方法提供的每个输入都会返回:2147483647
答案 0 :(得分:5)
正如CRD已经解释的那样,您正在尝试将该字符串转换为太小而无法保存该值的类型,并且您将获得该类型的最大可能值。
然而,你真正的问题更深层次。电话“号码”不是真正的号码。它不代表数量。你永远不会对其进行算术运算。它实际上是一串数字,你应该这样处理它。不要转换它;只是对字符串进行操作。
答案 1 :(得分:4)
2147483647是在溢出上返回的INT_MAX。您的电话号码有多大,是否适合int
?也许你应该使用longLongValue
?