ऑब्जेक्टिव-सी में स्ट्रिंग रूपांतरण कैसे करें?


145

मैं एक स्ट्रिंग को एक डबल में बदलना चाहता हूं और उस पर कुछ गणित करने के बाद, इसे एक स्ट्रिंग में परिवर्तित करता हूं।

मैं ऑब्जेक्टिव-सी में यह कैसे करूं?

क्या निकटतम पूर्णांक के लिए भी एक डबल चक्कर लगाने का एक तरीका है?


क्रिस हैनसन के जवाब के आगे, आप कोको के लिए डेटा फ़ॉर्मेटिंग प्रोग्रामिंग गाइड में मैक ओएस एक्स 10.4 पर NSNumberFormatter से संख्या फ़ॉर्मेटर्स, उनके व्यवहार और प्रारूप स्ट्रिंग के बारे में अधिक जानकारी प्राप्त कर सकते हैं ।
mmalc

आपके लिए उपयोगी हो सकने वाली जानकारी का एक अन्य स्रोत NSNumberFormatter के बारे में यह लेख है: iphonesdkarticles.com/2008/11/…
jpm

मुझे लगता है कि आधिकारिक दस्तावेज बहुत अच्छा है ...

जवाबों:


231

आप NSString को डबल में बदल सकते हैं

double myDouble = [myString doubleValue];

निकटतम इंट के लिए गोलाई फिर से की जा सकती है

int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))

मैं ईमानदारी से यकीन नहीं कर रहा हूँ अगर वहाँ से एक स्ट्रिंग में बदलने के लिए एक और अधिक सुव्यवस्थित तरीका है

NSString* myNewString = [NSString stringWithFormat:@"%d", myInt];

13
आप जरूरी नहीं कि यह करना चाहते हैं, क्योंकि अलग-अलग स्थानों की संख्या अलग-अलग होती है। कुछ एक हजार के लिए "1000" लिखेंगे, जबकि अन्य "1,000" और अन्य "1.000" लिखेंगे - जो आपको मिलता है - [एनएसएसट्रिंग डबलवैल्यू]?
क्रिस हैनसन

9
डबल एक संख्यात्मक डेटा प्रकार है - इसमें कोई स्वरूपण नहीं है। [NSString doubleValue] को कॉल करना 1000 वापस आएगा क्योंकि यह सिर्फ एक नंबर है।
एंडी

12
और एक NSString में एक संख्या नहीं हो सकती है, केवल एक संख्या का प्रतिनिधित्व है। यह प्रतिनिधित्व किसी भी प्रकार के प्रारूप में हो सकता है, जो लोकेल द्वारा भिन्न होता है।
क्रिस हैनसन

5
हो सकता है कि आप @Barry Wark के उत्तर को आप में एकीकृत करना चाहें,[[NSNumber numberWithInt:myInt] stringValue]
Dan Rosenstark

1
क्या होगा यदि स्ट्रिंग मान एक वैध डबल स्ट्रिंग नहीं है, तो 0.0 डबलवैल्यू द्वारा वापस आ जाएगा। मुझे ऐसा लगता है कि NSNumberFormatter के उपयोग का सुझाव देने वाला समाधान बेहतर है क्योंकि यदि स्ट्रिंग एक वैध डबल स्ट्रिंग का प्रतिनिधित्व नहीं करती है, तो निल वापस आ जाती है।
कायडेल

70

वास्तव में एक स्ट्रिंग से एक संख्या में ठीक से परिवर्तित करने के लिए, आपको NSNumberFormatterउस लोकेल के लिए कॉन्फ़िगर की गई आवृत्ति का उपयोग करने की आवश्यकता है, जिसमें से आप स्ट्रिंग पढ़ रहे हैं।

अलग-अलग स्थान अलग-अलग संख्याओं को प्रारूपित करेंगे। उदाहरण के लिए, दुनिया के कुछ हिस्सों में, COMMAदशमलव विभाजक के रूप में उपयोग किया जाता है , जबकि अन्य में यह है PERIOD- और हजारों विभाजक (जब उपयोग किया जाता है) उलटा होता है। सिवाय इसके कि कब एक जगह है। या बिल्कुल मौजूद नहीं है।

यह वास्तव में इनपुट की सिद्धता पर निर्भर करता है। NSNumberFormatterआपके इनपुट को फ़ॉर्मेट किया गया है और इससे -[NSFormatter numberFromString:]प्राप्त करने के लिए उपयोग करने के तरीके के लिए सबसे सुरक्षित चीज़ कॉन्फ़िगर NSNumberहै। यदि आप रूपांतरण त्रुटियों को संभालना चाहते हैं, तो आप -[NSFormatter getObjectValue:forString:range:error:]इसके बजाय उपयोग कर सकते हैं ।


2
या आप एक स्थानीयकृत स्कैनर का उपयोग कर सकते हैं, उदाहरण के लिए [NSScanner localizedScannerWithString:] के साथ बनाया गया, और फिर [स्कैनर ScanDouble: & aDouble] उपयोगकर्ता के वर्तमान स्थान के आधार पर एक डबल में स्कैन करेगा।
ड्रीमलैक्स

32

Olliej के जवाब देने के लिए जोड़ा जा रहा है, आप के साथ एक स्ट्रिंग के लिए एक पूर्णांक पीछे से परिवर्तित कर सकते हैं NSNumberकी stringValue:

[[NSNumber numberWithInt:myInt] stringValue]

stringValueएक NSNumberआह्वान पर descriptionWithLocale:nil, आपको मूल्य का स्थानीयकृत स्ट्रिंग प्रतिनिधित्व प्रदान करता है। मुझे यकीन नहीं है कि अगर [NSString stringWithFormat:@"%d",myInt]आप ठीक से स्थानीयकृत प्रतिशोध देंगे myInt


धन्यवाद बैरी। आपके द्वारा पोस्ट की गई स्ट्रिंगवैल्यू लाइन के लिए NSNumber मेरे लिए काम करता है, जबकि NSString stringWithFormat ने नहीं किया।
चिह्नित करें

7

olliej की गोलाई पद्धति नकारात्मक संख्याओं के लिए गलत है

  • 2.4 गोल 2 है (ओलीज की विधि इस अधिकार को प्राप्त करती है)
  • −2.4 गोल है (2 (ओलीज की विधि रिटर्न -1)

यहाँ एक विकल्प है

  int myInt = (int)(myDouble + (myDouble>0 ? 0.5 : -0.5))

आप बेशक math.h से एक राउंडिंग फ़ंक्शन का उपयोग कर सकते हैं


7

यहाँ NSNumberFormatter रीडिंग लोकल नम्बर स्ट्रिंग (xCode 3.2.4, osX 10.6) का वर्किंग सैंपल है, दूसरों को घंटों बचाने के लिए जो मैंने अभी-अभी मैसेज किया है। खबरदार: जबकि यह "8,765.4" जैसे पीछे आने वाले रिक्त स्थान को संभाल सकता है, यह प्रमुख सफेद स्थान को संभाल नहीं सकता है और यह आवारा पाठ वर्णों को संभाल नहीं सकता है। (खराब इनपुट स्ट्रिंग्स: "8" और "8q" और "8 q")।

NSString *tempStr = @"8,765.4";  
     // localization allows other thousands separators, also.
NSNumberFormatter * myNumFormatter = [[NSNumberFormatter alloc] init];
[myNumFormatter setLocale:[NSLocale currentLocale]]; // happen by default?
[myNumFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
     // next line is very important!
[myNumFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; // crucial

NSNumber *tempNum = [myNumFormatter numberFromString:tempStr];
NSLog(@"string '%@' gives NSNumber '%@' with intValue '%i'", 
    tempStr, tempNum, [tempNum intValue]);
[myNumFormatter release];  // good citizen

1
यदि स्ट्रिंग एक वैध स्ट्रिंग नहीं है तो नंबरफ्रॉमस्ट्रिंग क्या लौटाता है ?
बेन क्लेटन

numberFromString: एक NSNumber ऑब्जेक्ट देता है। Apple डॉक्स में NumberFormatting और NSNumberFormatter देखें । (मुझे यकीन नहीं है कि कैसे NSNumber ऑब्जेक्ट "एक नंबर नहीं" या "खराब नंबर" को एनकोड करते हैं, लेकिन मुझे लगता है कि NSNull संभव मान है।)
miker

अगर यह पार्स नहीं किया जा सकता तो @BenClayton नंबरफ्रॉम स्ट्रींग एक nilमूल्यवान रिटर्न देता NSNumber*है। मैं उस समस्या को पुन: पेश नहीं कर सकता जो आपके पास प्रमुख श्वेत स्थान और आवारा पाठ पात्रों के साथ थी, IMO यह ठीक से काम कर रहा है। " 28.5 "28.5 के रूप में पार्स करता है, और "gibberish28.5", "28.5gibberish"और "gibberish28.5gibberish"सब unparseable कर रहे हैं; " 2 8 . 5. "अप्राप्य है लेकिन यह असामान्य नहीं है।
jrh

3
// Converting String in to Double

double doubleValue = [yourString doubleValue];

// Converting Double in to String
NSString *yourString = [NSString stringWithFormat:@"%.20f", doubleValue];
// .20f takes the value up to 20 position after decimal

// Converting double to int

int intValue = (int) doubleValue;
or
int intValue = [yourString intValue];

3

संख्या से स्ट्रिंग में रूपांतरण के लिए, नए शाब्दिक सिंटैक्स (XCode> = 4.4) का उपयोग करने के बारे में, इसकी थोड़ी अधिक कॉम्पैक्ट।

int myInt = (int)round( [@"1.6" floatValue] );

NSString* myString = [@(myInt) description];

(यह एक NSNumber के रूप में बक्से और NSObjects विवरण विधि का उपयोग करके स्ट्रिंग में कनवर्ट करता है )


2

गोलाई के लिए, आपको संभवतः गणित में परिभाषित C फ़ंक्शन का उपयोग करना चाहिए।

int roundedX = round(x);

ऑप्शन डाउन होल्ड करें roundऔर Xcode पर डबल क्लिक करें और यह आपको विभिन्न प्रकारों को राउंड करने के लिए विभिन्न कार्यों के साथ मैन पेज दिखाएगा।



1

इस उदाहरण से यहां, आप रूपांतरणों को दोनों तरीकों से देख सकते हैं:

NSString *str=@"5678901234567890";

long long verylong;
NSRange range;
range.length = 15;
range.location = 0;

[[NSScanner scannerWithString:[str substringWithRange:range]] scanLongLong:&verylong];

NSLog(@"long long value %lld",verylong);

1

टेक्स्ट टेक्स्ट को पूर्णांक में दर्ज करें

double mydouble=[_myTextfield.text doubleValue];

निकटतम डबल करने के लिए गोलाई

mydouble=(round(mydouble));

निकटतम int (केवल सकारात्मक मूल्यों पर विचार) के लिए गोलाई

int myint=(int)(mydouble);

डबल से स्ट्रिंग में परिवर्तित करना

myLabel.text=[NSString stringWithFormat:@"%f",mydouble];

या

NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];

int से स्ट्रिंग में परिवर्तित करना

myLabel.text=[NSString stringWithFormat:@"%d",myint];

या

NSString *mystring=[NSString stringWithFormat:@"%f",mydouble];

1

मैंने इस आसान मैक्रो का उपयोग करके समाप्त किया:

#define STRING(value)               [@(value) stringValue]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.