user7724005
user7724005

Reputation: 17

Division giving odd results scala

I'm making a simple program to make a calculation for a game I play. I tried 2 attempts and it wasn't working. I made all the variables doubles but I still get this odd result. The values of actionTicks would be 1-10, skillLevel would be 1-99.

My current output is :

Your chance of receiving a pet is: 1.6E-6

Your chance is 0

Could someone explain why the result is wrong and how I'd fix it.

    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) ) 
  }
}

Upvotes: 1

Views: 84

Answers (2)

Malice
Malice

Reputation: 1482

To add to Leo's answer, you can write either of the terms in fractions as a double so that the result is also double, like

(8.0 * 10)/50000000)

Upvotes: 0

Leo C
Leo C

Reputation: 22439

Your app appears to have delivered exactly what you're asking it to. It looks like you might be confused by the scientific notation:

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

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

As to (8 * 10) / 50000000, it's an integer division returning an integer (that rounds towards 0) since the operands are all Int type:

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

Upvotes: 1

Related Questions