2017-10-09 7 views
0

私の結果をキロメートルからマイルに変換しようとしていますが、結果は正しくありません。単位変換キロメートルからマイルへの換算で期待される結果が返されない

ここで問題と思われるものは何ですか?

when { 
    // TIME: To calculate your time, fill in your distance and pace 
    time == null -> { 
     val calculatedTime = distance!!.toLong() * timeToSeconds(pace.toString()) 
     result.text = "The runner's time is ${secondsToTime(calculatedTime)}" 
    } 
    // DISTANCE: To calculate your distance, fill in your time and pace 
    distance == null -> { 
     val calculatedDistance = ((timeToSeconds(time).div(timeToSeconds 
     (pace.toString()))) * 0.621371).format(2) 
     result.text = "Distance is $calculatedDistance Miles" 
    } 
    // PACE: To calculate your pace, fill in your time and distance 
    pace == null -> { 
     // Calculate Pace 
     val calculatedPace: Long = timeToSeconds(time).toLong()/distance.toLong() 

     Log.i("PaceSeconds", calculatedPace.toString() + 
       secondsToTime(calculatedPace)) 

     result.text = "The runner's pace in miles is ${secondsToTime(calculatedPace)}" 
    } 
} 
+1

その入力と期待される出力のコードのほんの一部を投稿してください。また、コードの実行時に何が起こっているのかわからない場合は、デバッガを使用してその値を追跡してください。 – zsmb13

+0

何が正しくないか、このコードから期待されることと、あなたがすでに行った研究についての詳細を記入してください。デバッグヘルプを要求し、説明なしでソースを提供するだけの質問は、StackOverflowでトピック外とみなされます。 – hotkey

+1

「Androidが数学的に正しいことを証明していない」というのはかなりの声明です:DIは、あなたの計算が正しいことを確認するために小さなテストケースを書くことをお勧めします – Alessio

答えて

0

これは丸め問題です。それを打破することができます:

val timeInSeconds = timeToSeconds(time) 
val paceInSeconds = timeToSeconds(pace) 
val timeDivPace = timeInSeconds.div(paceInSeconds) 
val calculatedDistance = timeDivPace * 0.621371 

あなたのコメントからのサンプルデータを使用して、timeInSecondsは612とpaceInSecondsであるあなたがtimeDivPaceは7.373494であることを期待83であるが、2つの整数の割り算は、結果として整数を返すので、それは実際には7です。

修正は簡単です:例えば、floatに配当や除数のいずれかを変換:

val timeDivPace = timeInSeconds.div(paceInSeconds.toFloat()) 
関連する問題