从NSString转换为NSNumber期间修改数字

时间:2013-04-06 05:23:55

标签: ios objective-c nsstring nsnumber

 NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
    [f setNumberStyle:NSNumberFormatterDecimalStyle];
    NSNumber * myNumber = [f numberFromString:txt2.text];
    ctbook.number=myNumber;

在上面的ctbook.number的代码参数是NSNumber,所以我在传递给ctbook.number之前将文本字段值转换为NSNumber。但是当我从ctbook.number中检索值时,我得到了一个新的不同的数字,而不是我通过文本字段的数字。我错过了什么?这段代码出了什么问题?

2 个答案:

答案 0 :(得分:1)

如果没有其他信息很难说明问题是什么,但如果您需要快速而肮脏的东西,可以使用intValue的{​​{1}}或integerValue方法。

NSString

ctbook.number = @(txt2.txt.intValue); 语法只是@(x)

的简写

请注意,如果您的字符串不是有效[NSNumber numberWithInt:txt2.txt.intValue],则int来电将返回intValue

修改

鉴于最近的评论,问题不在于转换,而在于整数表示。

32位不足以表示您的号码,因此您最好使用较小的数字或使用0切换到64位表示。

答案 1 :(得分:1)

如果使用“Integer 32”作为Core Data属性的数据类型,则Core Data将(静默地)将值截断为32位。如果您指定的NSNumber值大于。{1}} 2^31 - 1 = 2147483647,然后它将被截断为32位,这解释了为什么在读取数据时获得不同的值。

您可以选择“整数64”作为核心数据实体中的数据类型,这将允许最大值2^63 - 1 = 9223372036854775807