Java 为什么Math.pow(x,y)算作双精度?
我正在编写一个Java程序来计算在我的《歌唱的怪物》中,一个怪物达到一定水平需要多少食物。当我运行程序时,它说,“不能从double转换为int”。有人能解释为什么会这样吗?这是节目单Java 为什么Math.pow(x,y)算作双精度?,java,int,double,pow,Java,Int,Double,Pow,我正在编写一个Java程序来计算在我的《歌唱的怪物》中,一个怪物达到一定水平需要多少食物。当我运行程序时,它说,“不能从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
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
,则必须执行显式强制转换。Math.pow返回double,并且您将double值指定给int,这就是它给出错误的原因。你必须放下它。像
int levelMeal = (int)5*(Math.pow(2,level-1));
我认为在大多数现代处理器上,通常硬件支持浮点幂运算,但不支持整数运算。正因为如此,对于一般的幂,实际上用
double
进行Math.power
运算,然后将其转换回int
会更快
然而,在这种情况下,有一种更快的方法来实现ints。由于您使用的是2的幂,因此可以使用:
javadoc。显示错误时,突出显示“int-levelmein=5*(Math.pow(2,level-1));”的行。@JasonChen pow返回什么数据类型?您试图将其分配给哪种类型的值?当您回答这些问题时,答案将是显而易见的。我是否应该将levelMein转换为double?错误本身就说明了问题。
5@Rhymoid-这就是我在回答中提到的。然而,我忽略了一个事实,那就是我可以直接移动5,而不是在之后进行乘法运算。我会更新我的答案。谢谢,我不知道。只是5
int levelMeal = 5*(1<<(level-1));
int levelMeal = 5<<(level-1);