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)}")
}
}
I get the error saying the For-loop range must have an 'Iterator()'Method. It underlines my doubles in the section (i in 1.0..2.0)
How can I use doubles in a range?? A website on Ranges Reloaded (https://blog.jetbrains.com/kotlin/2013/02/ranges-reloaded/ ) shows that using datatype Double is fine. I don't know what's wrong with mine. I need to use doubles for the fact that my interest rates are using decimals. Completely new to programming so hopefully someone can explain simply. Thanks!
Edit: added step .5
As of Kotlin 1.1, a ClosedRange<Double>
"cannot be used for iteration" (rangeTo()
- Utility functions - Ranges - Kotlin Programming Language).
You can, however, define your own step
extension function for this. e.g.:
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()
}
Although you can do this if you are working with money you shouldn't really be using Double
(or Float
). See Java Practices -> Representing money.
According to the documentation for ranges:
Floating point numbers (Double
, Float
) do not define their rangeTo
operator, and the one provided by the standard library for generic Comparable types is used instead:
public operator fun <T: Comparable<T>> T.rangeTo(that: T): ClosedRange<T>
The range returned by this function cannot be used for iteration.
You will have to use some other kind of loop since you can't use ranges.