简体   繁体   English

从NSCFString到NSNumber的对话

[英]Conversation from NSCFString to NSNumber

I've below numbers which are stored as NSCFString into SQLite 我下面的数字存储为NSCFString到SQLite


These numbers converts perfectly 这些数字可以完美转换

475602307163925662 475602307163925662

1529228456639250520 1529228456639250520

I am converting these like , (NSNumber *) [myDictionary valueForKey:@"stringData"]; 我正在将它们转换为 (NSNumber *) [myDictionary valueForKey:@"stringData"]; and its working perfectly 和它的完美工作


These numbers couldn't converts perfectly 这些数字无法完美转换

14154269406789154303 14154269406789154303

13207084142614401684 13207084142614401684

12870871772958895646 12870871772958895646

I want to convert these NSCFString into NSNumber. 我想将这些NSCFString转换为NSNumber。 I try using below code and google it but dont get exact solution as I want. 我尝试使用下面的代码并将其谷歌搜索,但没有得到我想要的确切解决方案。 Any help would be appriciated. 任何帮助将被申请。

NSNumberFormatter *f=[[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *myNumber=[f numberFromString:[myDictionary valueForKey:@"stringData"]];
[f release];

but it converts my number something like 9.45214212452152 但它会转换我的号码,例如9.45214212452152

I tried some other way as well but its also not working well. 我也尝试了其他方法,但也无法正常工作。

NSNumber *myNumber=[NSNumber numberWithLong:[myDictionary valueForKey:@"stringData"]];

Casting an object as another object (aka (NSNumber *) ) does not "convert" it. 铸造一个对象作为另一个对象(又名(NSNumber *) “转化”了。 It just promises the compiler that you're working with an object of that class which you aren't . 它只是向编译器保证您正在使用的不是该类的对象。

The reason why some numbers are totally failing is because they're too large to fit in the standard int/float/long sizes. 一些数字完全失败的原因是因为它们太大而无法容纳标准的int / float / long大小。 Instead of NSNumber , use NSDecimalNumber - a subclass of NSNumber (so you can still use all of the NSNumber methods as well). 代替NSNumber ,使用NSDecimalNumber - NSNumber的子类(因此您仍然可以使用所有NSNumber方法)。 It's specifically designed to handle large numbers: 它是专门为处理大量数据而设计的:

NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:<your string object>];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM