圆形双倍至最接近的10

时间:2015-01-13 12:39:12

标签: swift math rounding

我想将Double四舍五入到最接近的10倍。

例如,如果数字是8.0,则舍入到10。 如果数字为2.0,则为0。

我该怎么做?

7 个答案:

答案 0 :(得分:26)

您可以使用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)。

斯威夫特3:

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

可替换地:

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

答案 1 :(得分:7)

将舍入函数定义为

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

答案 2 :(得分:1)

在Swift 3.0中它是

10 * Int(round(Double(ratio / 10)))

答案 3 :(得分:0)

swift中BinaryFloatingPoint的好扩展:

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

    func roundToHundreds() -> Int{
        return 100 * Int(Darwin.round(self / 100.0))
    }
}

答案 4 :(得分:0)

您还可以扩展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

答案 5 :(得分:0)

扩展到四舍五入到任何数字!

extension Int{
   func rounding(nearest:Float) -> Int{
       return Int(nearest * round(Float(self)/nearest))
    }
}

答案 6 :(得分:0)

extension Double {
    var roundToTens: Double {
        let divideByTen = self / 10
        let multiByTen = (ceil(divideByTen) * 10)
        return multiByTen
    }
}

用法: 36.roundToTens