Kotlin中使用数据typesDouble的范围

fun calcInterest(amount: Double, interest: Double): Double { return(amount *(interest/100.0)) } fun main(args: Array) { 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/ )上的网站显示,使用数据typesDouble是好的。 我不知道我的是怎么了 我需要使用双打,因为我的利率是使用小数。 完全新编程,希望有人可以简单地解释。 谢谢!

编辑:添加步骤.5

根据范围的文件 :

浮点数( DoubleFloat )没有定义它们的rangeTo运算符,而是使用标准库为genericsComparabletypes提供的代码:

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

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

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

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

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

 infix fun ClosedRange.step(step: Double): Iterable { 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