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