Округление числа до нужной точности

Стандартная библиотека содержит ряд полезных функций для работы с числами: 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