2010-07-02 11 views
5

मैं एनएसएसटींग को एनएसएनंबर में numbreFromString का उपयोग किए बिना कनवर्ट करना चाहता हूं: विधि? NumbreFromString: मेटगोड 4.0 में अजीब तरह से अभिनय कर रहा है। तो मैं एनएसएसटींग को एनएसएनंबर में बदलने के लिए एक विकल्प का उपयोग करना चाहता हूं। कृपया मेरी मदद करो ....संख्या से काम करने के बिना एनएसएसटींग से NSNumber को परिवर्तित करने के लिए

+ (NSString *)formatText:(NSString *) text withLocalSettings:(BOOL) isLacale { 

    NSNumber *aNsNumber= [numberFormatter numberFromString: text]; 
    NSString *returnString = [NSString stringWithString:[numberFormatter stringForObjectValue:aNsNumber]]; 

    if(isLacale) { 
     return returnString; 
    } 
    else { 
     return [NSString stringWithFormat:@"%lf",[aNsNumber doubleValue]]; 
    } 
} 

मैं एक आवेदन मैं दोनों 3.0 और 4.0 में मेरी अनुप्रयोग चलाने के लिए की जरूरत को विकसित कर रहा हूँ। मेरे पास एक टेक्स्टफील्ड है जहां मैं टेक्स्टफील्ड में संख्याओं को दर्ज करने का प्रयास करता हूं, व्यवहार इस तरह है ... 3.0 में: - यह 7 अंकों और 2 fractional मानों को दर्ज करने की अनुमति देता है (मैंने इसे इस तरह स्वरूपित किया है)। मैंने चयनित देश के आधार पर अल्पविराम पृथक्करण के साथ संख्याओं को स्वरूपित और स्थानित किया है। यह पूरी तरह से 3.0 और 3.1.2

4.0 में: - यह आपको केवल 4 नंबरों में प्रवेश करने की अनुमति देता है और 5 वें अंक में प्रवेश करने के बाद यह टेक्स्टफील्ड खाली कर रहा है .. जब आप 5 वें नंबर में प्रवेश करते हैं तो कुछ भी प्रदर्शित नहीं होता है आप 6 वां नंबर दर्ज करते हैं जो इसे पहले नंबर से शुरू होता है और उसी टिल 4 नंबरों को जारी रखता है। पूर्व: - जब आप 1234 में प्रवेश करते हैं, तो टेक्स्टफील्ड दिखाई देता है - 1234 और जब आप 12345 दर्ज करते हैं, तो टेक्स्टफील्ड "" दिखाई देता है। और जब आप 6 में प्रवेश करते हैं तो यह 6 से शुरू होता है और इसी तरह ..

मैं टेक्स्टफील्ड में दर्ज मानों को प्रारूपित करने के लिए NSNumberFormatter और numberfromstring विधि का उपयोग कर रहा हूं।

मैं समझने के लिए क्यों यह इस तरह हो रहा है नहीं पा रहा हूँ ... कृपया मेरी मदद करो ...

+0

मैं शायद यह देखने की कोशिश करता हूं कि विधि अजीब तरीके से क्यों काम कर रही है। 10 में से 9 मामलों में समस्या इनपुट में निहित है। अपना कोड और इनपुट पोस्ट करें - जो हमें काम करने के लिए और अधिक देगा। –

+0

+ (एनएसएसटींग *) प्रारूप टेक्स्ट: (एनएसएसटींग *) टेक्स्ट के साथ टेक्स्टल सेटिंग्स: (बूल) isLacale { \t [संख्याफॉर्मेटर बनाए रखें]; \t NSNumber * aNsNumber = [[NSNumber alloc] init]; \t aNsNumber = [संख्याफॉर्मेटर संख्याप्रोस्ट्रिंग: टेक्स्ट]; \t \t // एनएसएलओजी (@ "एनएसएनंबर का मूल्य है ...% @", एएनएसएनंबर); \t एनएसएसटींग * वापसीस्ट्रिंग = [एनएसएसटींग स्ट्रिंगविथस्ट्रिंग: [संख्याफॉर्मेटर स्ट्रिंगफोरऑब्जेक्ट वैल्यू: एएनएस नम्बर]]; \t \t यदि (isLacale) { \t \t वापसी वापसीस्ट्रिंग; \t} बाकी \t { \t \t वापसी [NSString stringWithFormat: @ "% वामो", [aNsNumber doubleValue]]; \t} } –

+0

टेक्स्ट नंबर में 4 नंबर दर्ज करने के बाद एएनएसएनंबर 4.0 में शून्य हो रहा है और जब आप टेक्स्टफील्ड में 5 वां नंबर दर्ज करते हैं और इस प्रारूप को कॉल करने का प्रयास करते हैं तो टेक्स्ट विधि, एनएसएनंबर 4.0 में शून्य हो जाता है लेकिन 3.0 से 3.1.3 में यह ठीक काम कर रहा है .... –

उत्तर

16
[NSNumber numberWithInteger:[theString integerValue]]; 
[NSNumber numberWithDouble:[theString doubleValue]]; 

भी floatValue, intValue, longLongValue, boolValue

संपादित करें:

अल्पविराम के बाहर पट्टी, ऊपर करने से पहले stringByReplacingOccurrencesOfString का उपयोग करें।

theString = [theString stringByReplacingOccurrencesOfString:@"," withString:@""]; 

एक से अधिक चरित्र को निकाल देते हैं, तो आप कुछ componentsSeparatedByCharactersInSet के साथ काम मिल सकता है।

theSet = [NSCharacterSet characterSetWith...]; 
theString = [[theString componentsSeparatedByCharactersInSet:theSet] componentsJoinedByString:@""]; 
+0

मेरे पास एक स्ट्रिंग मान है जहां इसमें अल्पविराम शामिल है। पूर्व: - 1,234। मैं स्ट्रिंग का मान प्राप्त करना चाहता हूं जहां मुझे केवल 1234 की आवश्यकता है। क्या आप कृपया मेरी मदद कर सकते हैं ... –

0

iOS4 बहुत picky जब यह संख्या के स्वरूपण के लिए आता है।

अपने उदाहरण कोड में आप एक लोकेल में प्रवेश करते हैं - सुनिश्चित करें कि आपकी स्ट्रिंग में दशमलव विभाजक लोकेल में परिभाषित किया गया है। सुनिश्चित करें कि आप सही रूप से स्वरूपित (आईओएस 4) आईडी संख्याओं को दर्ज करते हैं, जो 9 हजार होना चाहिए 9.000 और 9000 नहीं यदि आप DecimalStyle का उपयोग कर रहे हैं।

यदि आप एक वैकल्पिक पार्सर - एसएसकेएनएफ का उपयोग करने पर जोर देते हैं तो एक एटोई एक विकल्प हो सकता है।

कन्वर्ट करने के लिए आवश्यक संख्याओं के आधार पर फॉर्मेटर या एटोई के साथ मानक सी lib के sscanf का उपयोग करें।

#include<stdio.h> 

int main(int argc, char **argv) { 

    char s[] = "1.2"; 
    double x; 

    sscanf(s, "%lf", &x); 
    printf("The decimal number was %g\n\n", x); 

    return 1; 
} 

atoi एक स्ट्रिंग युक्त एक स्ट्रिंग लेता है और मान को int के रूप में देता है।

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