Округление числа до нужной точности
Стандартная библиотека содержит ряд полезных функций для работы с числами: floor, round и trunc. Все они позволяют так или иначе округлять значения, но при этом точность задать, увы, нельзя. Обойти данное ограничение можно небольшой надстройкой:
import Foundation
func floorDouble(doubleValue: Double, toPrecision: Int) -> Double {
return floor(doubleValue * pow(10, Double(toPrecision))) / pow(10, Double(toPrecision))
}
func roundDouble(doubleValue: Double, toPrecision: Int) -> Double {
return round(doubleValue * pow(10, Double(toPrecision))) / pow(10, Double(toPrecision))
}
func truncDouble(doubleValue: Double, toPrecision: Int) -> Double {
return trunc(doubleValue * pow(10, Double(toPrecision))) / pow(10, Double(toPrecision))
}
let number: Double = 35712.5745
floor(number)
// Output: 35712
floorDouble(number, toPrecision: 3)
// Output: 35712.574
round(number)
// Output: 35713
roundDouble(number, toPrecision: 3)
// Output: 35712.575
trunc(number)
// Output: 35712
truncDouble(number, toPrecision: 3)
// Output: 35712.574
truncDouble(number, toPrecision: -3)
// Output: 35000