为什么Math.pow(x,y)算作双重?

时间:2014-04-27 17:53:48

标签: java int double pow

我正在编写一个Java程序来计算在My Singing Monsters中将怪物带到一定程度所需的食物量。当我运行该程序时,它说,"无法从double转换为int"。有人可以解释为什么会这样吗?这是该计划。

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.");
}

3 个答案:

答案 0 :(得分:12)

你必须这样做:

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

正如您在documentation中看到的那样,Math.pow()按设计返回double,但如果您需要int,则必须执行显式强制转换。

答案 1 :(得分:3)

我认为在大多数现代处理器上通常都有硬件支持来执行浮点功率,但不支持整数。因此,对于一般电源,使Math.power执行double实际上会更快,然后将其转换回int

然而,在这种情况下,有更快的方法来进行整数。由于您的权力为2,因此您只需使用bitwise left-shift operator

int levelMeal = 5*(1<<(level-1));

正如Rhymoid在他的评论中指出的那样,可以进一步简化该表达式以删除1

int levelMeal = 5<<(level-1);

答案 2 :(得分:0)

Math.pow返回double并将double值赋给int,这就是它给出错误的原因。你必须贬低它。像

int levelMeal = (int)5*(Math.pow(2,level-1));