Định dạng với số phân số tối đa, không có số 0 ở cuối
Tình huống này tốt khi mong muốn độ chính xác đầu ra tùy chỉnh. Giải pháp này có vẻ nhanh bằng giải pháp NumberFormatter + NSNumber từ MirekE , nhưng một lợi ích có thể là chúng ta đang tránh NSObject ở đây.
extension Double {
func string(maximumFractionDigits: Int = 2) -> String {
let s = String(format: "%.\(maximumFractionDigits)f", self)
var offset = -maximumFractionDigits - 1
for i in stride(from: 0, to: -maximumFractionDigits, by: -1) {
if s[s.index(s.endIndex, offsetBy: i - 1)] != "0" {
offset = i
break
}
}
return String(s[..<s.index(s.endIndex, offsetBy: offset)])
}
}
(cũng hoạt động với extension Float
, nhưng không hoạt động với loại chỉ macOS Float80
)
Cách sử dụng: myNumericValue.string(maximumFractionDigits: 2)
hoặcmyNumericValue.string()
Đầu ra cho maximumFractionDigits: 2
:
1,0 → "1"
0,12 → "0,12"
0,012 → "0,01"
0,0012 → "0"
0,00012 → "0"