Why Does Math.pow(x,y) Count as a Double?

Jason Chen picture Jason Chen · Apr 27, 2014 · Viewed 32.2k times · Source

I'm writing a Java program to calculate how much food it will take to get a monster to a certain level in My Singing Monsters. When I run the program, it says, "cannot convert from double to int". Can someone explain why this is? Here's the program.

int totalFood = 0;
int level = 1;
int levelMeal = 5*(Math.pow(2,level-1));
int mealNumber = 1;
int levelGoal = 1;
while(level != levelGoal)
{
  if(mealNumber != 5)
  {
    mealNumber += 1;
    totalFood += levelMeal;
  }
  else if(mealNumber == 5)
  {
    mealNumber = 0;
    level += 1;
  }
}
if(level == levelGoal)
{
  println("The total amount of food required for a monster to reach level " + levelGoal + " is " + totalFood + " food.");
}

Answer

Óscar López picture Óscar López · Apr 27, 2014

You'll have to do this:

int levelMeal = (int) (5*(Math.pow(2,level-1)));
                  ^
           this is a cast

As you can see in the documentation, Math.pow() returns a double by design, but if you need an int then an explicit cast must be performed.