使用Int范围生成特定的浮点数组

时间:2018-06-14 10:27:22

标签: arrays swift

我想用Int范围生成一个包含所有整数和.5值的数组。 结果想要:

min value = 0

max value = 5

generated Array = [0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5]

我知道如何只得到整数值:

Array(0...5)

但不是这个浮动值... 我觉得很清楚,有人有想法吗?

1 个答案:

答案 0 :(得分:10)

Array()stride(from:through:by:)

一起使用
let arr = Array(stride(from: 0, through: 5, by: 0.5))
print(arr)
[0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0]

如果您的minmax值确实为Int,那么您需要将它们转换为Double

let min = 0
let max = 5
let step = 0.5

let arr = Array(stride(from: Double(min), through: Double(max), by: step))

警告:

由于nature of floating point math,如果步骤或端点不能精确表示为二进制浮点数,则可能会导致意外结果。

@MartinR举了一个例子:

let arr = Array(stride(from: 0, through: 0.7, by: 0.1))
print(arr)
[0.0, 0.10000000000000001, 0.20000000000000001, 0.30000000000000004, 0.40000000000000002, 0.5, 0.60000000000000009]

排除了端点0.7,因为该值略高于它。

您可能还想考虑使用map生成数组:

// create array of 0 to 0.7 with step 0.1
let arr2 = (0...7).map { Double($0) / 10 }

这样可以保证捕获端点0.7(好吧,它的近似值)。

所以,对于你原来的例子:

// create an array from 0 to 5 with step 0.5
let arr = (0...10).map { Double($0) / 2 }