Округление чисел в быстрых 3 [дубликатов]

В настоящее время нет родительского селектора & amp; он даже не обсуждается ни в одном из переговоров W3C. Вам нужно понять, как CSS оценивается браузером, чтобы на самом деле понять, нужна ли нам это или нет.

Здесь есть много технических объяснений.

Джонатан Снук объясняет как оценивается CSS .

Крис Койер на переговорах о селекторе родителей .

Гарри Робертс снова написал эффективные селектора CSS .

Но Николь Салливан имеет некоторые интересные факты о положительных тенденциях .

Эти люди - все высшие классы в области разработки интерфейса .

6
задан Moritz 6 December 2016 в 13:22
поделиться

5 ответов

Вы можете использовать функцию round() (которая округляет число с плавающей запятой до ближайшего целочисленного значения) и применяет «масштабный коэффициент» 10:

func roundToTens(x : Double) -> Int {
    return 10 * Int(round(x / 10.0))
}

Пример использования:

print(roundToTens(4.9))  // 0
print(roundToTens(15.1)) // 20

Во втором примере 15.1 делится на десять (1.51), округленное (2.0), преобразованное в целое число (2) и снова умноженное на 10 (20 ).

Swift 3:

func roundToTens(_ x : Double) -> Int {
    return 10 * Int((x / 10.0).rounded())
}

Альтернативно:

func roundToTens(_ x : Double) -> Int {
    return 10 * lrint(x / 10.0)
}
21
ответ дан Martin R 19 August 2018 в 04:57
поделиться

Вы также можете расширить протокол FloatingPoint, а также добавить параметр для выбора правила округления:

extension FloatingPoint {
    func rounded(to value: Self, roundingRule: FloatingPointRoundingRule = .toNearestOrAwayFromZero) -> Self {
        return (self / value).rounded(roundingRule) * value
    }
}

let value = 325.0
value.rounded(to: 10) // 330 (default rounding mode toNearestOrAwayFromZero)
value.rounded(to: 10, roundingRule: .down) // 320
0
ответ дан Leo Dabus 19 August 2018 в 04:57
поделиться

В Swift 3.0 это

10 * Int(round(Double(ratio / 10)))
1
ответ дан netshark1000 19 August 2018 в 04:57
поделиться

Хорошее расширение для BinaryFloatingPoint в swift:

extension BinaryFloatingPoint{
    func roundToTens() -> Int{
        return 10 * Int(Darwin.round(self / 10.0))
    }

    func roundToHundreds() -> Int{
        return 100 * Int(Darwin.round(self / 100.0))
    }
}
0
ответ дан user1687195 19 August 2018 в 04:57
поделиться
  • 1
    extension BinaryFloatingPoint { func roundToTens() -> Self { return (self / 10).rounded() * 10 } } – Leo Dabus 2 June 2018 в 03:19

, определяющий функцию округления как

import Foundation

func round(_ value: Double, toNearest: Double) -> Double {
    return round(value / toNearest) * toNearest
}

, дает вам более общий и гибкий способ, как это сделать

let r0 = round(1.27, toNearest: 0.25)   // 1.25
let r1 = round(325, toNearest: 10)      // 330.0
let r3 = round(.pi, toNearest: 0.0001)  // 3.1416
4
ответ дан user3441734 19 August 2018 в 04:57
поделиться
  • 1
    Хороший общий ответ, который согласуется с существующим методом round (). Должно иметь больше отсрочки ИМХО. – biomiker 10 February 2018 в 00:57
Другие вопросы по тегам:

Похожие вопросы: