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
根据范围的文件 :
浮点数(
Double
,Float
)没有定义它们的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实践 – >代表金钱 。