উদ্দেশ্য-সি তে স্ট্রিং রূপান্তর কীভাবে করবেন?


145

আমি একটি স্ট্রিংকে ডাবল রূপান্তর করতে চাই এবং তার উপর কিছু গণিত করার পরে এটিকে আবার স্ট্রিংয়ে রূপান্তর করতে চাই।

আমি ওজেক্টিভ-সিতে এটি কীভাবে করব?

নিকটতম পূর্ণসংখ্যার কাছেও দ্বিগুণ গোল করার কোনও উপায় আছে?


ক্রিস হ্যানসনের উত্তর ছাড়াও, কোকোর জন্য ডেটা ফর্ম্যাটিং প্রোগ্রামিং গাইডে ম্যাক ওএস এক্স 10.4এনএসএনম্বারফর্মেটর থেকে সংখ্যার ফর্ম্যাটর, তাদের আচরণ এবং ফর্ম্যাট স্ট্রিং সম্পর্কে আরও জানতে পারবেন ।
mMLc

আপনার জন্য দরকারী হতে পারে এমন আরও একটি উত্স হ'ল এনএসএনম্বারফর্মেটর সম্পর্কিত এই নিবন্ধটি: iphonesdkarticles.com/2008/11/…
জেএম

আমি মনে করি অফিশিয়াল ডকুমেন্টেশনটি বেশ ভাল ...

উত্তর:


231

আপনি একটি এনএসএসস্ট্রিংকে ডাবল হিসাবে রূপান্তর করতে পারেন

double myDouble = [myString doubleValue];

নিকটতম ইনটি পর্যন্ত রাউন্ডিংয়ের পরে এটি করা যেতে পারে

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

আমি সত্যই নিশ্চিত নই যে এর চেয়ে বেশি স্ট্রিংয়ে রূপান্তরিত করার আরও সুশৃঙ্খল উপায় আছে কিনা

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

13
আপনি অগত্যা এটি করতে চান না, কারণ বিভিন্ন লোকাল বিন্যাসের সংখ্যা আলাদা format কেউ কেউ এক হাজারের জন্য "1000" লিখবে, অন্যরা "1,000" এবং অন্যরা "1.000" লিখবে - আপনি কোনটি থেকে পেয়েছেন - [এনএসএস স্ট্রিং ডাবলভ্যালু]?
ক্রিস হ্যানসন

9
ডাবল হ'ল একটি সংখ্যার ডেটা টাইপ - এতে কোনও বিন্যাস থাকে না। [এনএসএসটিং ডাবলভ্যালু] কল করা 1000 ফেরত আসবে কারণ এটি কেবল একটি সংখ্যা।
অ্যান্ডি

12
এবং একটি এনএসএস স্ট্রিংয়ে একটি সংখ্যা থাকতে পারে না, কেবল কোনও সংখ্যার উপস্থাপনা থাকে। এই উপস্থাপনাটি লোকাল অনুসারে বিভিন্ন ধরণের বিন্যাসে থাকতে পারে।
ক্রিস হ্যানসন

5
আপনি @ ব্যারি ওয়ার্কের উত্তরটি নিজের মধ্যে সংহত করতে চাইতে পারেন[[NSNumber numberWithInt:myInt] stringValue]
ড্যান রোজেনস্টার্ক

1
স্ট্রিংয়ের মানটি যদি কোনও বৈধ ডাবল স্ট্রিং না হয় তবে 0.0 ডাবলভ্যালু দ্বারা ফিরে আসবে। আমার কাছে মনে হচ্ছে এনএসএনম্বার ফর্ম্যাটটার ব্যবহারের পরামর্শ দেওয়ার সমাধানটি আরও ভাল কারণ যদি স্ট্রিংটি কোনও বৈধ ডাবল স্ট্রিং প্রতিনিধিত্ব না করে তবে শূন্যস্থান ফিরে আসে।
কায়ডেল

70

স্ট্রিং থেকে কোনও সংখ্যায় সঠিকভাবে রূপান্তর করতে আপনার NSNumberFormatterযে লোকাল থেকে স্ট্রিংটি পড়ছেন সেটির জন্য আপনাকে কনফিগার করা একটি উদাহরণ ব্যবহার করতে হবে ।

বিভিন্ন লোকেল সংখ্যা পৃথকভাবে ফর্ম্যাট করবে। উদাহরণস্বরূপ, বিশ্বের কিছু অংশে COMMAদশমিক বিভাজক হিসাবে ব্যবহৃত হয় অন্যদিকে এটি হয় PERIOD- এবং হাজার বিভাজক (যখন ব্যবহৃত হয়) বিপরীত হয়। এটি স্থান ছাড়াই a বা মোটেও উপস্থিত না।

এটি সত্যই ইনপুটটির প্রবর্তনের উপর নির্ভর করে। NSNumberFormatterআপনার ইনপুটটি যেভাবে ফর্ম্যাট করা হয়েছে সেটির জন্য নিরাপদ কাজটি কনফিগার করা এবং এ থেকে এটি -[NSFormatter numberFromString:]পেতে ব্যবহার করুন NSNumber। আপনি যদি রূপান্তর ত্রুটিগুলি পরিচালনা করতে চান তবে আপনি -[NSFormatter getObjectValue:forString:range:error:]পরিবর্তে ব্যবহার করতে পারেন ।


2
অথবা আপনি একটি স্থানীয় স্ক্যানার ব্যবহার করতে পারেন, উদাহরণস্বরূপ [এনএসএস স্ক্যানার লোকালাইজডস্ক্যানার উইথস্ট্রিং:] দিয়ে তৈরি করা একটি, এবং তারপরে [স্ক্যানার স্ক্যানডুবল: & এডুবল] ব্যবহারকারীর বর্তমান লোকেলের উপর ভিত্তি করে একটি ডাবল স্ক্যান করবে।
ড্রিমলাক্স

32

Olliej এর উত্তর যোগ করার পদ্ধতি, আপনার সাথে একটি স্ট্রিং আপনি কোন int পিছন থেকে রূপান্তর করতে পারেন NSNumberএর stringValue:

[[NSNumber numberWithInt:myInt] stringValue]

stringValueএকটি NSNumberঅনুরোধে descriptionWithLocale:nil, আপনাকে স্থানীয় মানের স্ট্রিংয়ের উপস্থাপন করে। আমি আপনাকে নিশ্চিতরূপে নিশ্চিত করতে পারি না যে [NSString stringWithFormat:@"%d",myInt]আপনি সঠিকভাবে স্থানীয়ভাবে পুনঃস্থাপন করবেন myInt


ধন্যবাদ ব্যারি আপনি পোস্ট করেছেন NSNumber থেকে স্ট্রিংভ্যালু লাইনে আমার পক্ষে কাজ করেছে, তবে এনএসএসস্ট্রিং স্ট্রিংউথ ফর্ম্যাটটি করেনি।
চিহ্নিত করুন

7

ওলিজেজের গোল করার পদ্ধতিটি নেতিবাচক সংখ্যার জন্য ভুল

  • ২.৪ গোল হ'ল ২ (অলিজেজের পদ্ধতিটি এই অধিকার পেয়েছে)
  • .42.4 গোলাকার হয় −2 (অলিজেজের পদ্ধতিটি ফেরত -1)

এখানে একটি বিকল্প আছে

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

আপনি অবশ্যই গণিত থেকে একটি রাউন্ডিং ফাংশন ব্যবহার করতে পারেন


7

আমি এনএসএনম্বার ফর্ম্যাটটার স্থানীয় কাজের স্ট্রিং (xCode 3.2.4, ওএসএক্স 10.6) পড়ার একটি নমুনা রইলাম, অন্যকে যে ঘন্টার মধ্যে আমি ব্যয় করেছি তার কয়েক ঘন্টা বাঁচাতে। সাবধান: এটি "8,765.4" এর মতো ট্র্যাকিং ফাঁকাগুলি হ্যান্ডেল করতে পারে, তবে এটি শীর্ষস্থানীয় সাদা স্থান পরিচালনা করতে পারে না এবং এটি বিপথগামী পাঠ্য অক্ষরগুলি পরিচালনা করতে পারে না। (খারাপ ইনপুট স্ট্রিং: "8" এবং "8 কিউ" এবং "8 কিউ"।)

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
স্ট্রিংটি যদি বৈধ স্ট্রিং না হয় তবে নাম্বার থেকে স্ট্রিং কী ফিরে আসবে ?
বেন ক্লেটন

সংখ্যাফ্রস্ট্রস্ট্রিং: একটি এনএসএনম্বার অবজেক্ট প্রদান করে। অ্যাপল ডক্সে নাম্বার ফর্ম্যাটিং এবং এনএসবার্বার ফরমেটার দেখুন । (এনএসনম্বার অবজেক্টগুলি কীভাবে "একটি সংখ্যা নয়" বা "খারাপ নম্বর" এনকোড করে তা আমি নিশ্চিত নই, তবে আমি দেখতে পাই একটি এনএসনুলের সম্ভাব্য মান রয়েছে))
মাইকার

@ বেনক্লেটন নম্বর ফ্রেম স্ট্রিং যদি পার্স করা যায় না তবে তার nilমূল্য দেয় NSNumber*। শীর্ষস্থানীয় সাদা স্থান এবং বিপথগামী পাঠ্য অক্ষরের সাথে আপনার যে সমস্যাটি হয়েছিল তা আমি পুনরুত্পাদন করতে পারি না, IMO এটি সঠিকভাবে কাজ করছে। " 28.5 "28.5 যেমন parses এবং "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

একটি সংখ্যা থেকে একটি স্ট্রিংয়ে রূপান্তর করার জন্য, কীভাবে নতুন লিটারাল সিনট্যাক্স (এক্সকোড> = 4.4) ব্যবহার করবেন, এটি কিছুটা আরও কমপ্যাক্ট।

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

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

(এটিকে এনএসএনবার হিসাবে বাক্স আপ করে এবং এনএসওবজেক্টের বর্ণনা পদ্ধতি ব্যবহার করে একটি স্ট্রিংয়ে রূপান্তরিত হয় )


2

রাউন্ডিংয়ের জন্য, আপনার সম্ভবত গণিতের মধ্যে সংজ্ঞায়িত সি ফাংশন ব্যবহার করা উচিত।

int roundedX = round(x);

অপশনটি ধরে রাখুন roundএবং এক্সকোডে ডাবল ক্লিক করুন এবং এটি আপনাকে বিভিন্ন ধরণের গোল করার জন্য বিভিন্ন ফাংশন সহ ম্যান পৃষ্ঠাটি প্রদর্শন করবে।



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 myint=(int)(mydouble);

ডাবল থেকে স্ট্রিং রূপান্তর

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

অথবা

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

ইনট থেকে স্ট্রিংয়ে রূপান্তর করা

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

অথবা

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

1

আমি এই হ্যান্ডি ম্যাক্রো ব্যবহার করে শেষ করেছি:

#define STRING(value)               [@(value) stringValue]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.