শুধুমাত্র দুটি দশমিক স্থান দেখায় একটি ভাসা তৈরি করুন


296

এ-তে আমার মান 25.00রয়েছে floatতবে আমি যখন এটি স্ক্রিনে মুদ্রণ করি তখন তা হয় 25.0000000
আমি মাত্র দুটি দশমিক জায়গার সাথে মানটি কীভাবে প্রদর্শন করতে পারি?


var nf = NSNumberFormatter () nf.positive Format = "0। ##" var numberAfterRound = nf.stringFromNumber (NSNumber (ডাবল: সংখ্যা))!
কল্পনাদেও

উত্তর:


648

সংখ্যাটি কীভাবে সংরক্ষণ করা হয় তা নয়, আপনি এটি কীভাবে প্রদর্শন করছেন তা বিষয়। এটিকে স্ট্রিংয়ে রূপান্তর করার সময় আপনাকে অবশ্যই পছন্দসই নির্ভুলতার সাথে গোল করতে হবে, যা আপনার ক্ষেত্রে দুটি দশমিক স্থান।

উদাহরণ:

NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];

%.02fবিন্যাসকে বলে যে আপনি একটি ভাসা ( %f) বিন্যাস করবেন এবং এটি দুটি স্থানে গোল করা উচিত এবং 0এর সাথে প্যাড করা উচিত ।

উদাহরণ:

%f = 25.000000
%.f = 25
%.02f = 25.00

7
আমি লক্ষ্য করেছি যে% .2f ব্যবহার করা আসলে আপনার উদাহরণে 25.00 না ফেরত আসে This এটি আশ্চর্যের বিষয়।
ফুলভিও

3
আমি যেভাবে সর্বদা বুঝতে পেরেছিলাম তা হ'ল দশমিক পয়েন্টের পরে সংখ্যাটি বলেছিল যে আপনি কত দশমিক পেয়েছেন। সুতরাং, .ff অবশ্যই 25.00 দেবে, এবং .4f 25.0000 দেবে।
এরিক এস

3
যদি কেউ কৌতূহল হয় তবে কীভাবে একজন আসলে পায় 25 .. @"%.f"কৌতুকটি করে। উপরে যা লেখা আছে, তা নয়
অ্যালেক্স গ্রে

4
@ এসকেপ্যাডস, আপনি যদি ব্যবহার করেন@"%.*f", decimalPlaces, number
জোনাথন।

12
সম্ভবত এটি আংশিক অফ-টপিক হবে তবে আমি অন্য ফর্ম্যাটটি যুক্ত করব:%03.f = 025
সফট ডিজাইনার

197

এখানে কয়েকটি সংশোধন করা হল-

//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"

এবং তাই ...


শেষটি কি সঠিক? @ "%। 03 এফ" = 3145.566? আপনি .560 এর পরিবর্তে .566 কীভাবে পেয়েছেন?
পিক্সেলফ্রেক

দশমিক জায়গাগুলির সংখ্যা নির্ধারণ করে পূর্ণসংখ্যা পরিবর্তনশীল হতে পারে? @ "%। xf" এর মতো যেখানে এক্স কোনও পূর্ণসংখ্যা হতে পারে?
6

আপনার যদি @ "%। F" নিয়ে সমস্যা হয় তবে @ "%। 0f" চেষ্টা করুন। আমি অন্য দশমিক জায়গা না পেয়ে যেখানে এই
কাজটি পেয়েছি

1
কেউ কি আমাকে বলতে পারবেন যে আপনি কেন% .2f এর পরিবর্তে% .02f ব্যবহার করবেন?
ইন্দোরবু

20

আপনি এনএসএনম্বারফর্মেটর ব্যবহার করেও দেখতে পারেন:

NSNumberFormatter* nf = [[[NSNumberFormatter alloc] init] autorelease];
nf.positiveFormat = @"0.##";
NSString* s = [nf stringFromNumber: [NSNumber numberWithFloat: myFloat]];

আপনার নেতিবাচক ফর্ম্যাটটিও সেট করার দরকার হতে পারে তবে আমি মনে করি এটি নির্ধারণের জন্য এটি যথেষ্ট স্মার্ট।


আপনার এই ফ্লোট নাম্বারটি দুটি ডেসিমাল ডিজিটস = atof ([গুলি ইউটিএফ 8 স্ট্রিং]) প্রয়োজন;
loretoparisi

10

আমি উপরের উত্তরের উপর ভিত্তি করে একটি দ্রুত এক্সটেনশন করেছি

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

এই সমাধানটি সিজিফ্লোট দিয়েও কাজ করে বলে মনে হচ্ছে। অসাধারণ!
ইনিস্ট

এই আমি খুঁজছিলাম ছিল। ধন্যবাদ বন্ধু!
তুষার কাতাল

9

সুইফট ল্যাঙ্গুয়েজে, আপনি যদি এটি দেখাতে চান তবে আপনাকে এটি এইভাবে ব্যবহার করা দরকার। ইউআইটিেক্সটভিউতে দ্বৈত মান নির্ধারণের জন্য, উদাহরণস্বরূপ:

let result = 23.954893
resultTextView.text = NSString(format:"%.2f", result)

আপনি যদি এনওএসএলগ () ব্যবহার করে উদ্দেশ্য-সি-এর মতো এলওজি-তে দেখাতে চান তবে সুইফট ল্যাঙ্গুয়েজে আপনি এইভাবে এটি করতে পারেন:

println(NSString(format:"%.2f", result))

3

উদ্দেশ্য-সি-তে, আপনি যদি নিয়মিত চর অ্যারে নিয়ে কাজ করে থাকেন (এনএসএস স্ট্রিংয়ের পরিবর্তে পয়েন্টার পরিবর্তে) আপনি এটি ব্যবহার করতে পারেন:

printf("%.02f", your_float_var);

ওটিওহ, আপনি যা চান তা যদি মান ব্যবহার করা যায় তবে আপনি এটি ব্যবহার করতে পারেন:

sprintf(your_char_ptr, "%.02f", your_float_var);

3

সমস্ত উত্তরগুলির সাথে সমস্যাটি হ'ল গুণক এবং তারপরে নির্ভুলতার ক্ষেত্রে ফলাফলগুলি ভাগ করা কারণ আপনি বিভাজনটি ব্যবহার করেছিলেন। আমি পিডিপি 8-তে প্রোগ্রামিং থেকে অনেক আগে এটি শিখেছি। এটি সমাধানের উপায় হ'ল:

return roundf(number * 100) * .01;

সুতরাং 15.6578 15.6578999 বা এর মতো অপ্রয়োজনীয় কিছু না করে কেবল 15.66 প্রদান করে।

আপনি কী স্তরের নির্ভুলতা চান তা আপনার উপর নির্ভর করে। কেবল পণ্যটি ভাগ করবেন না, এটি দশমিক সমতুল্য দ্বারা গুণ করুন। কোনও মজাদার স্ট্রিং রূপান্তর প্রয়োজন।


1

অবজেক্টিভ-সিতে আপনি 2 দশমিক সংখ্যায় ফ্লোট মান প্রদর্শন করতে চান তবে আপনি কত দশমিক পয়েন্ট প্রদর্শন করতে চান তা নির্দেশ করে যুক্তিটি পাস করুন 0.02f মুদ্রণ করবে 25.00 0.002f মুদ্রণ করবে 25.000


1

এখানে একটি নির্ভুলতা অনুসারে গতিশীল আকারে ফর্ম্যাট করার জন্য কিছু পদ্ধতি রয়েছে:

+ (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 (রাউন্ড আপ)


এটি খুব ভাল সমাধান, বড় ধন্যবাদ। এটি কীভাবে কাজ করে তা আমাকে বোঝাতে পারেন? আমি দেখতে পেয়েছি আপনি অতিরিক্ত '%' চিহ্ন যোগ করেছেন।
ইউজিন আলেক্সেভ

1

সুইফটের জন্য অন্য একটি পদ্ধতি (এনএসএস স্ট্রিং ব্যবহার না করে):

let percentage = 33.3333
let text = String.localizedStringWithFormat("%.02f %@", percentage, "%")

PS এই সমাধানটি সিজিফ্লোট টাইপের সাথে কাজ করছে না কেবল Floatএবং এর সাথে পরীক্ষিতDouble


1
@ অজানা ডাউনভোটার এই সুইফট এর সমাধান সমাধান কাজ করছে এবং সুইফটের জন্য অন্যান্য উত্তরগুলির চেয়ে আলাদা তাই কেন?
আকস

যদি আপনি কোনও ফ্লোট ফিরিয়ে দিতে পারেন তবে আপনি সর্বদা এটি সিজিফ্লোয়েটে রূপান্তর করতে পারবেন
ইনিস্ট

1

ব্যবহার করুন NSNumberFormatterসঙ্গে maximumFractionDigitsনিচে হিসাবে:

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.maximumFractionDigits = 2;
NSLog(@"%@", [formatter stringFromNumber:[NSNumber numberWithFloat:12.345]]);

এবং আপনি পাবেন 12.35


0

আপনার পাশাপাশি ভাসমান মান প্রয়োজন:

NSString* formattedNumber = [NSString stringWithFormat:@"%.02f", myFloat];
float floatTwoDecimalDigits = atof([formattedNumber UTF8String]);

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