2017-06-01 7 views
0
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のi)データタイプDoubleを使用するKotlinの範囲

どのようにして範囲内の倍音を使うことができますか? Ranges Reloaded(https://blog.jetbrains.com/kotlin/2013/02/ranges-reloaded/)のウェブサイトでは、Doubleというデータ型を使用しても問題ありません。私は何が間違っているのか分かりません。私は金利が小数点を使用しているという事実に倍精度を使う必要があります。うまくいけば、誰かが簡単に説明できるように、プログラミングに全く新しいものです。ありがとう!

編集:documentation for rangesによると、ステップ0.5

+1

これはかなり奇妙なことですが、どうしたらいいですか?すべての4503599627370496を1から2の倍数で列挙しますか?それは多いです。 – harold

+0

機能が削除されたようですが、whileループを使用する必要があります。 – zsmb13

+0

私はステップ.5を追加することを意図していました。私はあなたが文書によると範囲内のダブルスを使うことはできないと思うが、/ –

答えて

1

を追加しました:

浮動小数点数(DoubleFloat)そのrangeTo演算子を定義し、一般的なため、標準ライブラリが提供するものはありません比較可能なタイプが代わりに使用されます。

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

この関数が返す範囲は、反復に使用できません。

範囲を使用できないため、他の種類のループを使用する必要があります。

2

Kotlin 1.1以降、ClosedRange<Double>は "反復に使用できません"(rangeTo() - Utility functions - Ranges - Kotlin Programming Language)。

ただし、独自のstepextension functionを定義することはできます。例えば:

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) [email protected] null 
     val next = previous + step 
     if (next > endInclusive) null else next 
    } 
    return sequence.asIterable() 
} 

あなたが本当にDouble(またはFloat)を使用すべきでないお金で作業している場合は、この操作を行うことができますが。 Java Practices -> Representing moneyを参照してください。

関連する問題