উত্তর:
এটি ingালাই করছে না, এটি একটি ফর্ম্যাট সহ একটি মান থেকে একটি স্ট্রিং তৈরি করছে।
let a: Double = 1.5
let b: String = String(format: "%f", a)
print("b: \(b)") // b: 1.500000
একটি ভিন্ন বিন্যাস সহ:
let c: String = String(format: "%.1f", a)
print("c: \(c)") // c: 1.5
format
কোনও বিন্যাসের প্রয়োজন না হলে আপনি সম্পত্তিটি বাদ দিতে পারেন।
format:"%.1f" = 1 digit // 1.5
; format:"%.5f" = 5 digits // 1.50000
String(yourDouble)
।
let double = 1.5
let string = double.description
এক্সকোড 7.1 আপডেট করুন • সুইফট 2.1:
এখন ডাবল স্ট্রিংয়ে রূপান্তরিত হয় যাতে আপনি এটি আপনার ইচ্ছামত ব্যবহার করতে পারেন:
let double = 1.5
let doubleString = String(double) // "1.5"
সুইফট 3 বা তারপরে আমরা এটি প্রসারিত LosslessStringConvertible
এবং জেনেরিক করতে পারি
এক্সকোড 11.3 • সুইফ্ট 5.1 বা তারপরে
extension LosslessStringConvertible {
var string: String { .init(self) }
}
let double = 1.5
let string = double.string // "1.5"
ভগ্নাংশের একটি নির্দিষ্ট সংখ্যার জন্য আমরা FloatingPoint
প্রোটোকল প্রসারিত করতে পারি :
extension FloatingPoint {
func fixedFraction(digits: Int) -> String {
return String(format: "%.*f", digits, self as! CVarArg)
}
}
আপনার যদি আপনার নম্বর বিন্যাসের উপর আরও নিয়ন্ত্রণের প্রয়োজন হয় (সর্বনিম্ন এবং সর্বাধিক ভগ্নাংশের সংখ্যা এবং রাউন্ডিং মোড) আপনি নাম্বার ফর্ম্যাটার ব্যবহার করতে পারেন:
extension Formatter {
static let number = NumberFormatter()
}
extension FloatingPoint {
func fractionDigits(min: Int = 2, max: Int = 2, roundingMode: NumberFormatter.RoundingMode = .halfEven) -> String {
Formatter.number.minimumFractionDigits = min
Formatter.number.maximumFractionDigits = max
Formatter.number.roundingMode = roundingMode
Formatter.number.numberStyle = .decimal
return Formatter.number.string(for: self) ?? ""
}
}
2.12345.fractionDigits() // "2.12"
2.12345.fractionDigits(min: 3, max: 3, roundingMode: .up) // "2.124"
String(format: "%.\(digits)f", self as! CVarArg)
সঙ্গেString(format: "%.*f", digits, self as! CVarArg)
@ জাফ উত্তর ছাড়াও, আপনি তৈরি করতে পারেন extension:
extension Double {
func toString() -> String {
return String(format: "%.1f",self)
}
}
ব্যবহার:
var a:Double = 1.5
println("output: \(a.toString())") // output: 1.5
a.toString()
অন্য বিকাশকারী দ্বারা দেখেন অবশ্যই একটি ডাব্লুটিএফ মুহুর্ত থাকবে।
myToString()
এটির কাস্টম সংজ্ঞা নিশ্চিত করতে এটি পরিবর্তন করতে পারেন । তবে অন্যান্য ভাষার মতো প্রোটোটাইপিং কোড ডুপ্লিকেট এবং ভাল রক্ষণাবেক্ষণ এড়ানোর দিকে পরিচালিত করে।
println("output: \(a.toString())")
এবং println("output: \(a)")
। দ্বিতীয় বিকল্প সংকলন ত্রুটি ঘটায় না। এই বিকল্পটি কি খারাপ অভ্যাস?
yourDouble?.toString() ?? ""
সুইফট 4 : নিম্নলিখিত কোড ব্যবহার করুন
let number = 2.4
let string = String(format: "%.2f", number)
এই ফাংশনটি আপনাকে দেখানোর জন্য দশমিক জায়গাগুলির সংখ্যা নির্দিষ্ট করতে দেবে:
func doubleToString(number:Double, numberOfDecimalPlaces:Int) -> String {
return String(format:"%."+numberOfDecimalPlaces.description+"f", number)
}
ব্যবহার:
let numberString = doubleToStringDecimalPlacesWithDouble(number: x, numberOfDecimalPlaces: 2)
String(format:"%."+numberOfDecimalPlaces.description+"f", number)
সঙ্গেString(format:"%.*f", numberOfDecimalPlaces, number)
এখানে অনেক উত্তর রয়েছে যা বিভিন্ন কৌশল প্রস্তাব করে। তবে ইউআইতে সংখ্যা উপস্থাপন করার সময়, আপনি অবিচ্ছিন্নভাবে এমন একটি ব্যবহার করতে চান NumberFormatter
যাতে ফলাফলগুলি যথাযথভাবে ফর্ম্যাট, গোল এবং স্থানীয়করণ হয়:
let value = 10000.5
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
guard let string = formatter.string(for: value) else { return }
print(string) // 10,000.5
আপনি যদি দশমিক স্থানের স্থির সংখ্যা চান তবে মুদ্রা মানগুলির জন্য
let value = 10000.5
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 2
guard let string = formatter.string(for: value) else { return }
print(string) // 10,000.50
তবে এই পদ্ধতির সৌন্দর্যটি হ'ল এটি সঠিকভাবে স্থানীয়করণ করা হবে, যার ফলস্বরূপ 10,000.50
মার্কিন যুক্তরাষ্ট্রে তবে 10.000,50
জার্মানি। বিভিন্ন লোকেলে সংখ্যার জন্য আলাদা আলাদা পছন্দসই ফর্ম্যাট NumberFormatter
রয়েছে এবং ইউআই এর মধ্যে সংখ্যাসূচক মানগুলি উপস্থাপন করার সময় আমাদের শেষ ব্যবহারকারীর পছন্দসই ফর্ম্যাটটি ব্যবহার করা উচিত ।
বলা বাহুল্য, NumberFormatter
ইউআইয়ের মধ্যে স্ট্রিং উপস্থাপনা তৈরি করার সময় এটি অপরিহার্য , যখন অবিচ্ছিন্ন স্টোরেজ, ওয়েব পরিষেবাদির সাথে ইন্টারফেস ইত্যাদির জন্য স্ট্রিং হিসাবে সংখ্যার মানগুলি লেখা হয় তবে এটি ব্যবহার করা উচিত নয়
সুইফ্ট 3 এ এটি নীচের মত সহজ
let stringDouble = String(describing: double)
"Optional(6.1696108999999995)"
আমার জন্য উদাহরণস্বরূপ returns
var b = String(stringInterpolationSegment: a)
এটি আমার পক্ষে কাজ করে। আপনি চেষ্টা করতে পারেন
সুইফট 4-এ আপনি যদি টেক্সট লেবেল "স্ট্রিং" হিসাবে UI তে ডাবলটি সংশোধন করতে এবং ব্যবহার করতে চান তবে আপনি আপনার ফাইলটির শেষে এটি যুক্ত করতে পারেন:
extension Double {
func roundToInt() -> Int{
return Int(Darwin.round(self))
}
}
আপনি যদি এটি কোনও পাঠ্য লেবেলে রাখতে চান তবে এটি ব্যবহার করুন:
currentTemp.text = "\(weatherData.tempCelsius.roundToInt())"
অথবা এটি কোনও ইন্টার হিসাবে মুদ্রণ করুন:
print(weatherData.tempCelsius.roundToInt())
আমি এনএসএনम्बर এবং নাম্বার ফর্ম্যাটার পদ্ধতির পছন্দ করতে চাই (যেখানে প্রয়োজন), আপনি ফোলা কোড এড়াতে এক্সটেনশনও ব্যবহার করতে পারেন
extension Double {
var toString: String {
return NSNumber(value: self).stringValue
}
}
ইউ এছাড়াও বিপরীত পদ্ধতির প্রয়োজন হতে পারে
extension String {
var toDouble: Double {
return Double(self) ?? .nan
}
}
LossLessStringConvertible
ডাবলextension LosslessStringConvertible { var string: String { return .init(self) } }
সুইফট 5 : নিম্নলিখিত কোড ব্যবহার করুন
extension Double {
func getStringValue(withFloatingPoints points: Int = 0) -> String {
let valDouble = modf(self)
let fractionalVal = (valDouble.1)
if fractionalVal > 0 {
return String(format: "%.*f", points, self)
}
return String(format: "%.0f", self)
}
}
String(format: "%.\(points)f", self)
সঙ্গেString(format: "%.*f", points, self)
var b = "\(a)"