在不使用 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
鉴于这些双打:
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