এ-তে আমার মান 25.00
রয়েছে float
তবে আমি যখন এটি স্ক্রিনে মুদ্রণ করি তখন তা হয় 25.0000000
।
আমি মাত্র দুটি দশমিক জায়গার সাথে মানটি কীভাবে প্রদর্শন করতে পারি?
এ-তে আমার মান 25.00
রয়েছে float
তবে আমি যখন এটি স্ক্রিনে মুদ্রণ করি তখন তা হয় 25.0000000
।
আমি মাত্র দুটি দশমিক জায়গার সাথে মানটি কীভাবে প্রদর্শন করতে পারি?
উত্তর:
সংখ্যাটি কীভাবে সংরক্ষণ করা হয় তা নয়, আপনি এটি কীভাবে প্রদর্শন করছেন তা বিষয়। এটিকে স্ট্রিংয়ে রূপান্তর করার সময় আপনাকে অবশ্যই পছন্দসই নির্ভুলতার সাথে গোল করতে হবে, যা আপনার ক্ষেত্রে দুটি দশমিক স্থান।
উদাহরণ:
NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
%.02f
বিন্যাসকে বলে যে আপনি একটি ভাসা ( %f
) বিন্যাস করবেন এবং এটি দুটি স্থানে গোল করা উচিত এবং 0
এর সাথে প্যাড করা উচিত ।
উদাহরণ:
%f = 25.000000
%.f = 25
%.02f = 25.00
25
.. @"%.f"
কৌতুকটি করে। উপরে যা লেখা আছে, তা নয় ।
@"%.*f", decimalPlaces, number
%03.f = 025
এখানে কয়েকটি সংশোধন করা হল-
//for 3145.559706
সুইফট 3
let num: CGFloat = 3145.559706
print(String(format: "%f", num)) = 3145.559706
print(String(format: "%.f", num)) = 3145
print(String(format: "%.1f", num)) = 3145.6
print(String(format: "%.2f", num)) = 3145.56
print(String(format: "%.02f", num)) = 3145.56 // which is equal to @"%.2f"
print(String(format: "%.3f", num)) = 3145.560
print(String(format: "%.03f", num)) = 3145.560 // which is equal to @"%.3f"
OBJ-সি
@"%f" = 3145.559706
@"%.f" = 3146
@"%.1f" = 3145.6
@"%.2f" = 3145.56
@"%.02f" = 3145.56 // which is equal to @"%.2f"
@"%.3f" = 3145.560
@"%.03f" = 3145.560 // which is equal to @"%.3f"
এবং তাই ...
আপনি এনএসএনম্বারফর্মেটর ব্যবহার করেও দেখতে পারেন:
NSNumberFormatter* nf = [[[NSNumberFormatter alloc] init] autorelease];
nf.positiveFormat = @"0.##";
NSString* s = [nf stringFromNumber: [NSNumber numberWithFloat: myFloat]];
আপনার নেতিবাচক ফর্ম্যাটটিও সেট করার দরকার হতে পারে তবে আমি মনে করি এটি নির্ধারণের জন্য এটি যথেষ্ট স্মার্ট।
আমি উপরের উত্তরের উপর ভিত্তি করে একটি দ্রুত এক্সটেনশন করেছি
extension Float {
func round(decimalPlace:Int)->Float{
let format = NSString(format: "%%.%if", decimalPlace)
let string = NSString(format: format, self)
return Float(atof(string.UTF8String))
}
}
ব্যবহার:
let floatOne:Float = 3.1415926
let floatTwo:Float = 3.1425934
print(floatOne.round(2) == floatTwo.round(2))
// should be true
সুইফট ল্যাঙ্গুয়েজে, আপনি যদি এটি দেখাতে চান তবে আপনাকে এটি এইভাবে ব্যবহার করা দরকার। ইউআইটিেক্সটভিউতে দ্বৈত মান নির্ধারণের জন্য, উদাহরণস্বরূপ:
let result = 23.954893
resultTextView.text = NSString(format:"%.2f", result)
আপনি যদি এনওএসএলগ () ব্যবহার করে উদ্দেশ্য-সি-এর মতো এলওজি-তে দেখাতে চান তবে সুইফট ল্যাঙ্গুয়েজে আপনি এইভাবে এটি করতে পারেন:
println(NSString(format:"%.2f", result))
উদ্দেশ্য-সি-তে, আপনি যদি নিয়মিত চর অ্যারে নিয়ে কাজ করে থাকেন (এনএসএস স্ট্রিংয়ের পরিবর্তে পয়েন্টার পরিবর্তে) আপনি এটি ব্যবহার করতে পারেন:
printf("%.02f", your_float_var);
ওটিওহ, আপনি যা চান তা যদি মান ব্যবহার করা যায় তবে আপনি এটি ব্যবহার করতে পারেন:
sprintf(your_char_ptr, "%.02f", your_float_var);
সমস্ত উত্তরগুলির সাথে সমস্যাটি হ'ল গুণক এবং তারপরে নির্ভুলতার ক্ষেত্রে ফলাফলগুলি ভাগ করা কারণ আপনি বিভাজনটি ব্যবহার করেছিলেন। আমি পিডিপি 8-তে প্রোগ্রামিং থেকে অনেক আগে এটি শিখেছি। এটি সমাধানের উপায় হ'ল:
return roundf(number * 100) * .01;
সুতরাং 15.6578 15.6578999 বা এর মতো অপ্রয়োজনীয় কিছু না করে কেবল 15.66 প্রদান করে।
আপনি কী স্তরের নির্ভুলতা চান তা আপনার উপর নির্ভর করে। কেবল পণ্যটি ভাগ করবেন না, এটি দশমিক সমতুল্য দ্বারা গুণ করুন। কোনও মজাদার স্ট্রিং রূপান্তর প্রয়োজন।
এখানে একটি নির্ভুলতা অনুসারে গতিশীল আকারে ফর্ম্যাট করার জন্য কিছু পদ্ধতি রয়েছে:
+ (NSNumber *)numberFromString:(NSString *)string
{
if (string.length) {
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
f.numberStyle = NSNumberFormatterDecimalStyle;
return [f numberFromString:string];
} else {
return nil;
}
}
+ (NSString *)stringByFormattingString:(NSString *)string toPrecision:(NSInteger)precision
{
NSNumber *numberValue = [self numberFromString:string];
if (numberValue) {
NSString *formatString = [NSString stringWithFormat:@"%%.%ldf", (long)precision];
return [NSString stringWithFormat:formatString, numberValue.floatValue];
} else {
/* return original string */
return string;
}
}
যেমন
[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:4];
=> 2.3453
[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:0];
=> 2
[TSPAppDelegate stringByFormattingString:@"2.346324" toPrecision:2];
=> 2.35 (রাউন্ড আপ)
সুইফটের জন্য অন্য একটি পদ্ধতি (এনএসএস স্ট্রিং ব্যবহার না করে):
let percentage = 33.3333
let text = String.localizedStringWithFormat("%.02f %@", percentage, "%")
PS এই সমাধানটি সিজিফ্লোট টাইপের সাথে কাজ করছে না কেবল Float
এবং এর সাথে পরীক্ষিতDouble
ব্যবহার করুন NSNumberFormatter
সঙ্গে maximumFractionDigits
নিচে হিসাবে:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.maximumFractionDigits = 2;
NSLog(@"%@", [formatter stringFromNumber:[NSNumber numberWithFloat:12.345]]);
এবং আপনি পাবেন 12.35
আপনার পাশাপাশি ভাসমান মান প্রয়োজন:
NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
float floatTwoDecimalDigits = atof([formattedNumber UTF8String]);
lblMeter.text=[NSString stringWithFormat:@"%.02f",[[dic objectForKey:@"distance"] floatValue]];