इन डबल्स को देखते हुए:

let one: Double = 1
let alsoOne: Double = 1.0
let oneAsWell: Double = 1.00
let x: Double = 1.10
let y: Double = 1.010
let z: Double = 1.0010

मैं उन्हें स्ट्रिंग में कैसे परिवर्तित कर सकता हूं ताकि वे केवल अपने प्रासंगिक अंश अंकों को बिना नंबरफॉर्मेटर या प्रारूप के रख सकें (जहां कोई केवल अंश अंकों की एक निश्चित संख्या निर्दिष्ट कर सकता है)?

खेल का मैदान बिल्कुल वही दिखाता है जो मैं चाहता हूं:

1
1
1
1.1
1.01
1.001

String(), String(describing:), .description या "\()" का उपयोग करने से मुझे यह मिलता है:

1.0
1.0
1.0
1.1
1.01
1.001

तो खेल का मैदान अपने स्ट्रिंग रूपांतरण के लिए क्या उपयोग कर रहा है? मझे वह चहिए! ;)

यह कैसा दिखता है खेल का मैदान

-1
fulty12 18 जिंदा 2021, 02:01
यह प्रकार विवरण संपत्ति का उपयोग कर रहा है। स्विफ्ट प्रोटोकॉल की जाँच करें CustomStringConvertible
 – 
Leo Dabus
18 जिंदा 2021, 02:40
खेल का मैदान शायद संख्या फ़ॉर्मेटर का उपयोग कर रहा है जिसमें न्यूनतम अंश अंक शून्य पर सेट हैं। "(जहाँ कोई केवल भिन्न अंकों की एक निश्चित संख्या निर्दिष्ट कर सकता है)" यह सच नहीं है क्योंकि आप न्यूनतम और अधिकतम अंश अंक गुणों की संख्या निर्धारित कर सकते हैं।
 – 
Leo Dabus
18 जिंदा 2021, 02:45
.description का परिणाम अन्य सभी के समान है। उद्धृत भाग केवल format की बात कर रहा था। मुझे पता है कि NumberFormatter भिन्न अंकों के लिए सेटिंग्स का समर्थन करता है। प्रदर्शन कारणों से इससे बचना चाहते हैं।
 – 
fulty12
18 जिंदा 2021, 11:04

1 उत्तर

सबसे बढ़िया उत्तर

आप ऐसा कुछ कर सकते हैं:

extension FloatingPoint {
    var string: String {
        let result = "\(self)"
        return result.hasSuffix(".0") ? String(result.dropLast(2)) : result
    }
}

let one: Double = 1
let alsoOne: Double = 1.0
let oneAsWell: Double = 1.00
let x: Double = 1.10
let y: Double = 1.010
let z: Double = 1.0010

print(one.string)        // 1
print(alsoOne.string)    // 1
print(oneAsWell.string)  // 1
print(x.string)          // 1.1
print(y.string)          // 1.01
print(z.string)          // 1.001
0
vacawama 18 जिंदा 2021, 03:11
FloatingPoint के लिए कोई String-प्रारंभकर्ता क्यों नहीं है?
 – 
fulty12
18 जिंदा 2021, 11:26