簡體   English   中英

為什么Math.pow(x,y)算作雙重?

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

我正在編寫一個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.");
}

你必須這樣做:

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

正如您在文檔中看到的, Math.pow()按設計返回一個double ,但如果您需要int則必須執行顯式強制轉換。

我認為大多數現代處理器通常都支持硬件支持浮點功率,但不支持整數。 因此,對於一般的權力,使用double執行Math.power實際上更快,然后將其轉換回int

但是,在這種情況下,有更快的方法來執行它。 由於您的功率為2,因此您可以使用按位左移運算符

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

正如Rhymoid在他的評論中所指出的,該表達式可以進一步簡化以刪除1

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

Math.pow返回double,你將double值賦給int,這就是它給出錯誤的原因。 你必須貶低它。 喜歡

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM