分部给出奇怪的结果scala

时间:2018-01-13 23:19:00

标签: scala

我正在制作一个简单的程序来计算我玩的游戏。我尝试了2次尝试但没有用。我把所有的变量都加倍了,但我仍然得到了这个奇怪的结果。 actionTicks的值为1-10,skillLevel为1-99。

我目前的输出是:

您收到宠物的机会是:1.6E-6

你的机会是0

有人可以解释为什么结果是错误的以及我如何解决它。

    import scala.io.StdIn._

object PetRates {

  def main(args: Array[String]): Unit = {

    var baseDiv: Double = 50000000

    println("Enter amount of ticks per action: ")
    var actionTicks = readDouble()

    println("Now enter your skill level: ")
    var skillLvl = readDouble()

    var result: Double = actionTicks*skillLvl

    println("Your chance is: " + (result / baseDiv))

    println("Your chance is " + ((8 * 10)/50000000) ) 
  }
}

2 个答案:

答案 0 :(得分:1)

您的应用似乎已完全按照您的要求提供。您可能会对scientific notation

感到困惑
scala> (8.0 * 10.0) / 50000000.0
// res1: Double = 1.6E-6

scala> 0.0000016
// res2: Double = 1.6E-6

对于(8 * 10) / 50000000,它是一个整数除法,返回一个整数(向0舍入),因为操作数都是Int类型:

scala> (8 * 10) / 50000000
// res3: Int = 0

scala> 40000000 / 50000000
// res4: Int = 0

scala> 80000000 / 50000000
// res5: Int = 1

scala> -40000000 / 50000000
// res5: Int = 0

答案 1 :(得分:0)

要添加到Leo的答案中,您可以将分数中的任一项写为double,以便结果也是双倍的,例如

(8.0 * 10)/50000000)