如何在swift中将变量舍入到数组中最接近的数字?

时间:2017-03-11 22:37:41

标签: swift

我在swift中有一段代码,其中最终的计算需要四舍五入到预定义数组中的最接近的数字?你会怎么做?

var array = [8, 23, 31, 46, 54, 69, 77, 92, 100, 115, 123, 138]
var finalCalculation = 55.5
//round 55.5 to the nearest number in array which is 54

2 个答案:

答案 0 :(得分:0)

我想到的唯一方法是循环并跟踪哪一个最接近并将其与数组中的下一个项目进行比较,但是,我确信这可以改进,在这里:

var array: Array<Double> = [8, 23, 31, 46, 54, 69, 77, 92, 100, 115, 123, 138]
var finalCalculation: Double = 55.5

var closest: Double = array[0]

for item in array {
    if abs(finalCalculation - item) < abs(finalCalculation - closest) {
        closest = item
    }
}

print(closest)

abs 部分是为了确保您获得数字之间的距离。

答案 1 :(得分:0)

var result = array.reduce(100, { x, y in
    abs(Double(x) - finalCalculation) > abs(Double(y) - finalCalculation) ? y : x
})

&#39; 100&#39;是一个任意大的数字,开始减少计算。你可以使用你喜欢的任何东西,只要它大于finalCalculation和你的答案之间的差异。