【发布时间】:2014-06-11 02:55:25
【问题描述】:
我正在尝试将NSString 转换为NSNumber,但我得到的值与我的预期不同。
for(ClassA *item in appD.classArray)
{
NSNumberFormatter * f = [[NSNumberFormatter alloc] init]; // Method A
[f setNumberStyle:NSNumberFormatterDecimalStyle];
item.number = [f numberFromString:stringA];
item.number = [[NSDecimalNumber alloc]initWithString:stringA]; // Method B
item.number = @([stringA intValue]); // Method C
item.number = [NSNumber numberWithUnsignedInt:[stringA integerValue]]; // Method D
NSLog(@"string A %@",stringA);
NSLog(@"item.number %@",item.number);
[ClassA updateClassInfo:item];
}
控制台输出为:
string A 111775
item.number -19297
使用不同的方法产生相同的结果。转换后的字符串将变为负数。
编辑
P/S:我的应用程序中的字符串 A 每次运行时都会随着值的增加而增加。
NSNumber *number = [NSNumber new];
NSLog(@"stringA %@",stringA);
item.number = [NSNumber new];
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
number = [f numberFromString:stringA];
NSLog(@"number %@",number);
item.number = number;
NSLog(@"item.number %@",item.number);
number = [[NSDecimalNumber alloc]initWithString:stringA];
NSLog(@"number %@",number);
item.number = number;
NSLog(@"item.number %@",item.number);
number = @([stringA intValue]);
NSLog(@"number %@",number);
item.number = number;
NSLog(@"item.number %@",item.number);
number = [NSNumber numberWithInteger:[stringA integerValue]];
NSLog(@"number %@",number);
item.number = number;
NSLog(@"item.number %@",item.number);
控制台输出为:
2014-06-11 18:06:31.262 App[751:907] stringA 111796
2014-06-11 18:06:31.266 App[751:907] number 111796
2014-06-11 18:06:31.269 App[751:907] item.number -19276
2014-06-11 18:06:31.271 App[751:907] number 111796
2014-06-11 18:06:31.274 App[751:907] item.number -19276
2014-06-11 18:06:31.276 App[751:907] number 111796
2014-06-11 18:06:31.278 App[751:907] item.number -19276
2014-06-11 18:06:31.280 App[751:907] number 111796
2014-06-11 18:06:31.287 App[751:907] item.number -19276
【问题讨论】:
-
您的问题是什么?当我运行此代码时,我得到一个
NSNumber(或在方法 B 的情况下为NSDecimalNumber),您的所有四个方法(在 OS X 和 iOS 上)都返回值 111775。 -
我正在尝试将字符串转换为数字,但它给了我负值。不知道为什么。
-
因为您使用
%d而不是%@来格式化 NSNumber 并且您看到的是指针值? -
%d????哪个表示是 %d?
-
我已经使用了你的代码,我得到了预期的输出:2014-06-11 11:11:32.192 SampleApp[5404:70b] string A 111775 2014-06-11 11:11:32.194 SampleApp [5404:70b] 转换后的字符串 111775
标签: objective-c nsstring nsnumber valueconverter