Форматирование с максимальным количеством цифр дробной части, без конечных нулей
Этот сценарий хорош, когда требуется настраиваемая точность вывода. Это решение кажется примерно таким же быстрым, как решение NumberFormatter + NSNumber от MirekE , но одним из преимуществ может быть то, что здесь мы избегаем NSObject .
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)])
}
}
(работает также extension Float, но не только с macOS Float80)
Использование: myNumericValue.string(maximumFractionDigits: 2)илиmyNumericValue.string()
Вывод для maximumFractionDigits: 2:
1,0 → «1»
0,12 → «0,12»
0,012 → «0,01»
0,0012 → «0»
0,00012 → «0»