在不使用 NumberFormatter 的情况下将 Double 转换为具有最小小数位数的 String

Convert Double to String with minimum fraction digits without using NumberFormatter

鉴于这些双打:

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

如何将它们转换为字符串,以便它们只保留相关的小数位数而不使用 NumberFormatter 或格式(其中只能指定固定数量的小数位数)?

游乐场正是我想要的:

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

那么 Playground 使用什么进行字符串转换?我要那个! ;)

This is what the Playground looks like

你可以这样做:

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