值应四舍五入到最接近的十分之一或最接近的四分之一

时间:2015-12-01 14:14:17

标签: ios swift math swift2

我需要将数字舍入到最接近的十分之一或最近的四分之一。

例如:

如果值是0.225到0.265,它们是圆形到0.25并且它们是 从0.265到0.350,它们都是0.30。

所以我需要知道最近的舍入对于某个数字是什么而不是围绕它。

3 个答案:

答案 0 :(得分:2)

您可以使用switch声明。

主要功能:

func differentRounding(value:Double) -> Double {

    var decimalValue = value % 1
    let intValue = value - decimalValue

    switch decimalValue {
    case 0.225..<0.265 :
        decimalValue = 0.25
    case 0.725..<0.765 :
        decimalValue = 0.75
    default :
        decimalValue = ((decimalValue * 10).roundDownTillFive()) / 10
    }

    return decimalValue + intValue
}

differentRounding(1.2434534545) // 1.25
differentRounding(3.225345346) // 2.25
differentRounding(0.2653453645) // 0.3
differentRounding(0.05) // 0
differentRounding(0.04456456) // 0

向下舍入到5分机:

extension Double {
    func roundDownTillFive() -> Double {

        var decimalValue = self % 1
        let intValue = self - decimalValue

        switch decimalValue {
        case 0.0...0.5 :
            decimalValue = 0.0
        case 0.5...1.0 :
            decimalValue = 1.0
        default :
            break
        }

        return decimalValue + intValue
    }
}

Double(0.5).roundDownTillFive() // 0
Double(0.50000001).roundDownTillFive() // 1

答案 1 :(得分:1)

import Foundation

func specround(d: Double)->Double {
    let d1 = round(d * 10) / 10
    let d2 = round(d * 4 ) / 4

    return abs(d2-d) < abs(d1-d) ? d2 : d1
}

specround(1.2249999) // 1.2
specround(1.225)     // 1.25
specround(1.276)     // 1.3

答案 2 :(得分:1)

这是一个加倍的扩展,用于舍入到最接近的双倍数量,用于任何等于输入的值除以2。

extension Double {
    func roundToNearestValue(value: Double) -> Double {
        let remainder = self % value
        let shouldRoundUp = remainder >= value/2 ? true : false
        let multiple = floor(self / value)
        let returnValue = !shouldRoundUp ? value * multiple : value * multiple + value
        return returnValue
    }
}