ডাবল থেকে 2 দশমিক স্থানে গোল করে


88

আমি কীভাবে currentRatioদুটি দশমিক জায়গায় পৌঁছাতে পারি?

let currentRatio = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)!
railRatioLabelField.text! = "\(currentRatio)"

আপনি কি কেবলমাত্র currentRatioদুটি দশমিক স্থানে গোল করতে চান , বা সর্বদা রাউন্ড আপ করতে চান? উদাহরণস্বরূপ: আপনি কি 3.141 -> 3.14 বা 3.141 -> 3.14 চান?
জাল

হাই জাল, আমি 3.159 3.15 হিসাবে প্রদর্শন করতে চাই। তবে 3.141 প্রদর্শিত হবে 3.14। ধন্যবাদ
ডেল হিন্দ্স

সঠিক গোল করার জন্য আমার উত্তরটির প্রথম অংশটি দেখুন।
জাল

উত্তর:


174

দুই দশমিক স্থান বৃত্তাকার পর্যন্ত একটি ফরম্যাট স্ট্রিং ব্যবহার করুন এবং রূপান্তর doubleএকটি থেকে String:

let currentRatio = Double (rxCurrentTextField.text!)! / Double (txCurrentTextField.text!)!
railRatioLabelField.text! = String(format: "%.2f", currentRatio)

উদাহরণ:

let myDouble = 3.141
let doubleStr = String(format: "%.2f", myDouble) // "3.14"

আপনি যদি আপনার শেষ দশমিক স্থানটি ঘিরে ধরতে চান তবে আপনি এই জাতীয় কিছু করতে পারেন (ধন্যবাদ ফিন1 এক্স ইউকে):

let myDouble = 3.141
let doubleStr = String(format: "%.2f", ceil(myDouble*100)/100) // "3.15"

দুটি দশমিক স্থানে গোল করে তবে 3.15 হওয়া দরকার।
ম্যাট লে ফ্লেউর

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

হাই জল, আপনাকে ধন্যবাদ, আমি আপনার উত্তরটি ব্যবহার করেছি যা নিম্নরূপে সামান্য পরিবর্তন নিয়ে কাজ করেছে: - _ = ডাবল (rxCurrentTextField.text!)! / ডাবল (txCurrentTextField.text!)! রেলরেটিওবেলফিল্ড.টেক্সট! = স্ট্রিং (ফর্ম্যাট: "% .2f", বর্তমান تناسب)
ডেল হিন্ডস

4
এই প্রশ্নের প্রশ্নের উত্তর: "পাঠ্য লেবেলে দুটি অঙ্কের সাথে ডাবল কীভাবে প্রদর্শিত হবে" বা "... স্ট্রিং হিসাবে", এই উত্তরটি প্রশ্নের উত্তর দেয় না "ডাবল থেকে 2 দশমিক 2 রাউন্ড আপ"
এমএনএল

প্রাক্তন পয়েন্টের জন্য @ জাল আমার কাছে অ্যালনি .5 বা 0 পরে দরকার। আমাদের যদি 23.4 থাকে তবে এটি 23.5 দিতে হবে এবং 23.8 হলে এটি 24.0
গুরুর

33

(সুইফট ৪.২ এক্সকোড ১১) এক্সটেনশনটি ব্যবহার করা সহজ: -

extension Double {
    func round(to places: Int) -> Double {
        let divisor = pow(10.0, Double(places))
        return (self * divisor).rounded() / divisor
    }
}

ব্যবহার: -

if let distanceDb = Double(strDistance) {
   cell.lblDistance.text = "\(distanceDb.round(to:2)) km"
}

উজ্জ্বল। আমি আসলে একই সম্পত্তি (ডাবল) এ রূপান্তর করতে চেয়েছিলাম। আপনার এক্সটেনশনটি আমার সমস্যার সমাধান করেছে। ধন্যবাদ!
মার্সেলো ডস সান্টোস

:-) শুভ কোডিং
মেহুল

আমি মনে করি আপনার সঠিক উত্তর। আমি শুধু ফানকে একটি বাক্য গঠন পরিবর্তন করতে চাই। func round(to places: Int) -> Double {
23inhouse

4
@ 23inhouse, আমি আপনার পরামর্শ অনুসারে উত্তর আপডেট করেছি। ধন্যবাদ
মেহুল

29

সুইফট 4 এ আপডেট হয়েছে এবং প্রশ্নের সঠিক উত্তর

আপনি যদি 2 দশমিক স্থানে গোল করতে চান তবে আপনার 100 এর সাথে গুণ করা উচিত এবং তারপরে এটি গোল করে বন্ধ করে 100 টি দিয়ে ভাগ করতে হবে divide

var x = 1.5657676754 
var y = (x*100).rounded()/100
print(y)  // 1.57 

4
হাই - আমি নির্দিষ্ট সংখ্যার দশমিক ফেরতের ক্ষেত্রে আপনি কীভাবে আপনার গণনাটি করেন তা আমি বুঝতে পারি না। আমি যদি চাই যে এটি 3 দশমিক জায়গায় ফিরে আসে?
সিফো কোজা

@ সিফোকোজা এটিকে মাত্র 1000 দ্বারা গুণিত করুন এবং তারপরে 1000 দিয়ে ভাগ করুন
চেতন রাজগিরি

এটি সত্যিকারের "যথাযথ" উত্তর নয় কারণ অভ্যন্তরীণভাবে, সংখ্যাটি ভাসমান পয়েন্টে সংরক্ষণ করা হয়, বেস 2 সহ, এবং আপনি একটি বেস 10 সংখ্যা উপস্থাপন করার চেষ্টা করছেন। কিছু সংখ্যার জন্য সঠিক প্রতিনিধিত্ব নেই এবং আপনি যখন মানটি মুদ্রণ করতে যান তখন আপনি অনেকগুলি সংখ্যার সাথে সজ্জিত হন। সঠিক উত্তরের একটি স্ট্রিং ফেরত দেওয়া উচিত, ডাবল বা ফ্লোট নয়।
ভিক্টর এঙ্গেল

@ লিভান এটি শূন্যের জন্যও কাজ করে, কেবল এটি দ্বিগুণ নিশ্চিত করুন
চেতন রাজগিরি

4
দুর্দান্ত উত্তর, আমি মনে করি এটি গ্রহণযোগ্য হওয়া উচিত।
i orihpt

15

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

let amount = 10.000001
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
let formattedAmount = formatter.string(from: amount as NSNumber)! 
print(formattedAmount) // 10

আমি অনেকের মধ্যে দিয়ে গেছি, এটিই এখন পর্যন্ত, সেরা সমাধান! তোমাকে অনেক ধন্যবাদ!
কালাফুন

13

উপরের উত্তরে যুক্ত করা যদি আমরা একাধিকবার ডাবল ফর্ম্যাট করতে চাই তবে আমরা নীচের মতো ডাবলের প্রোটোকল এক্সটেনশনটি ব্যবহার করতে পারি:

extension Double {
    var dollarString:String {
        return String(format: "$%.2f", self)
    }
}

let a = 45.666

print(a.dollarString) //will print "$45.67"

4
মুদ্রণ করা উচিত নয় (a.dollarString)?
glm4

4

দশমিকের পরে নির্দিষ্ট অঙ্কের কোডটি হ'ল:

var roundedString = String(format: "%.2f", currentRatio)

এখানে% .2f এই সংখ্যাটিকে 2 দশমিক স্থানে গোল করতে দ্রুতগতিতে বলছে।


4

@ গোলাকার , একটি দ্রুত 5.1 সম্পত্তি র‌্যাপার উদাহরণ:

struct GameResult {
    @Rounded(rule: NSDecimalNumber.RoundingMode.up,scale: 4)
    var score: Decimal
}

var result = GameResult()
result.score = 3.14159265358979
print(result.score) // 3.1416


2

আমার মতো নুবুর জন্য কেবলমাত্র দ্রুত অনুসরণের উত্তর:

আউটপুট সহ একটি ফাংশন ব্যবহার করে আপনি অন্যান্য উত্তরগুলি সুপার সহজে প্রয়োগযোগ্য করতে পারেন । যেমন

  func twoDecimals(number: Float) -> String{
    return String(format: "%.2f", number)
}

এইভাবে, আপনি যখনই টাইপ করেন এমন 2 দশমিক স্থানে যখনই কোনও মান ধরতে চান

দ্বিমুখী (' এখানে আপনার নম্বর ')

...

সরল!

পিএস আপনি স্ট্রিং রূপান্তরের পরে নিম্নলিখিত রূপে আবার রূপান্তর করে এটিকে একটি ফ্লোট মান বা আপনার পছন্দসই কিছু ফিরিয়ে আনতে পারেন:

 func twoDecimals(number: Float) -> Float{
    let stringValue = String(format: "%.2f", number)
    return Float(stringValue)!
}

আশা করি এইটি কাজ করবে.


-1

আপনি এটি 234.545332233 দিলে এটি আপনাকে 234.54 দেবে

let textData = Double(myTextField.text!)!
let text = String(format: "%.2f", arguments: [textData])
mylabel.text = text

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