Kotlin中使用数据类型Double的范围

fun calcInterest(amount: Double, interest: Double): Double { return(amount *(interest/100.0)) } fun main(args: Array<String>) { for (i in 1.0..2.0 step .5) { println("&10,000 at 5% interest is = ${calcInterest(10000.0,i)}") } } 

我得到的错误说For循环范围必须有一个“Iterator()”方法。 它强调了我的双打(我在1.0..2.0)

我怎样才能在一个范围内使用双打? 重新加载范围( https://blog.jetbrains.com/kotlin/2013/02/ranges-reloaded/ )上的网站显示使用数据类型Double是好的。 我不知道我的是怎么了 我需要使用双打,因为我的利率是使用小数。 完全新编程,希望有人可以简单地解释。 谢谢!

编辑:添加步骤.5

根据范围的文件 :

浮点数( DoubleFloat )不定义它们的rangeTo运算符,而是使用标准库为泛型Comparable类型提供的代码:

 public operator fun <T: Comparable<T>> T.rangeTo(that: T): ClosedRange<T> 

该函数返回的范围不能用于迭代。

你将不得不使用一些其他类型的循环,因为你不能使用范围。

从Kotlin 1.1开始, ClosedRange<Double> “不能用于迭代”( rangeTo() – 效用函数 – 范围 – Kotlin编程语言 )。

但是,您可以为此定义您自己的step 扩展功能 。 例如:

 infix fun ClosedRange<Double>.step(step: Double): Iterable<Double> { require(start.isFinite()) require(endInclusive.isFinite()) require(step > 0.0) { "Step must be positive, was: $step." } val sequence = generateSequence(start) { previous -> if (previous == Double.POSITIVE_INFINITY) return@generateSequence null val next = previous + step if (next > endInclusive) null else next } return sequence.asIterable() } 

虽然你可以做到这一点,如果你正在使用金钱,你不应该使用Double (或Float )。 请参阅Java实践 – >代表金钱 。

Interesting Posts