2010-09-01 9 views
5

मैं एक एनएसएसटींग ऑब्जेक्ट को एक समान संख्यात्मक मान के साथ एनएसएनंबर में परिवर्तित करने की कोशिश कर रहा हूं। जब मैं इस कथन का उपयोग NSString वस्तु बनाने ...NSNumber क्लास सही ढंग से मेरे एनएसएसटींग ऑब्जेक्ट को लंबे समय तक क्यों परिवर्तित नहीं कर रहा है?

NSString *songID = [localNotif.userInfo objectForKey:@"SongID"]; 

वर songID स्ट्रिंग मान @"10359537395704663785" शामिल हैं। और जब मैं यह कथन का उपयोग एक NSNumber वस्तु में बदलने के लिए ...

NSNumber *songIDNumber = [NSNumber numberWithLongLong:[songID longLongValue]]; 

वर songIDNumber9223372036854775807

क्या मैं गलत कर रहा हूँ के गलत मान का प्रयास? यह ध्यान देने योग्य भी हो सकता है कि कभी-कभी यह कोड काम करता है और सही NSNumber मान का उत्पादन करता है, लेकिन अधिकांश समय यह ऊपर दिखाए गए अनुसार विफल रहता है।

आपकी मदद के लिए अग्रिम धन्यवाद!

अद्यतन: ईश्वर मुझे इस साइट से प्यार है! unbeli और कार्ल के लिए धन्यवाद, मैं NSString से NSNumber को परिवर्तित करने के लिए अद्यतन कोड का उपयोग कर इसे ठीक करने में सक्षम था ...

unsigned long long ullvalue = strtoull([songID UTF8String], NULL, 0); 
NSNumber *songIDNumber = [NSNumber numberWithUnsignedLongLong:ullvalue]; 

उत्तर

4

9223372036854775807 दशमलव हेक्स में 0x7FFFFFFFFFFFFFFF है। आपकी संख्या 10359537395704663785 है, जो long long और अतिप्रवाह के लिए बहुत बड़ी है। NSString documentation से:

रिटर्न LLONG_MAX या LLONG_MIN अतिप्रवाह पर।

5

longLongValuereturns अतिप्रवाह के मामले में LLONG_MAX, और LLONG_MAX आप क्या मिलता है ठीक है, 9223372036854775807. आप मूल्य बस long long

में फिट नहीं करता है बजाय NSDecimalNumber का उपयोग करें।

संबंधित मुद्दे