Kotlin如何创建指定步长的Double类型数值范围列表?
Kotlin生成指定步长的Double列表问题
你的代码报错是因为Kotlin中用..创建的浮点数区间(比如Double类型的ClosedFloatingPointRange)没有step扩展函数——step只支持整数类型的区间(Int、Long等)来生成数列。
以下是两种可行的实现方式:
方式一:用generateSequence生成(推荐)
通过生成序列的方式,从起始值开始每次累加步长,直到超过结束值为止,最后转成列表:
val heightOptionsInCm: List<Double> = generateSequence(92.0) { it + 1.5 } .takeWhile { it <= 214.50 + 1e-10 } // 加极小值处理浮点数精度误差 .toList()
- 优点:逻辑直观,自动处理边界,避免手动计算元素个数的麻烦;
- 加
1e-10是为了防止浮点数累加时的精度问题(比如214.5可能被计算成214.49999999999997,导致被takeWhile过滤掉)。
方式二:计算元素个数后用map生成
先算出区间内的元素总数,再通过索引映射生成每个值:
val start = 92.0 val end = 214.50 val step = 1.5 val count = ((end - start) / step).toInt() + 1 // 计算元素个数 val heightOptionsInCm: List<Double> = (0 until count).map { start + step * it }
- 注意:这种方式依赖浮点数除法的精度,如果
(end - start)不能被step整除,可能会少生成一个元素,需要根据实际情况调整。
内容的提问来源于stack exchange,提问作者GVG
相关产品推荐
相关产品推荐

