为什么 Math.pow(x,y) 算作双精度值?

2022-09-04 08:30:23

我正在编写一个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.");
}

答案 1

您必须执行以下操作:

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

正如您在文档中看到的,返回 a 按设计,但如果需要,则必须执行显式强制转换。Math.pow()doubleint


答案 2

我认为大多数现代处理器通常都支持进行浮点功数,但不支持整数。因此,对于一幂,实际上使用 a 然后将其转换回 .Math.powerdoubleint

但是,在这种情况下,有一种更快的方法来为int执行此操作。由于您执行的幂为 2,因此可以改用按位左移运算符

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

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

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

推荐