当前位置: 首页 > 面试题库 >

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

鲁靖
2023-03-14
问题内容

我正在编写一个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 != 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按设计返回a
,但是如果需要,int则必须执行显式强制转换。



 类似资料:
  • 此方法将基数返回到指数幂,即基于幂指数。 语法 (Syntax) Math.pow(x, y) 参数 (Parameter) x - 代表基数 y - 代表指数 返回值 (Return Value) 返回指数幂的基数。 例子 (Example) console.log("---Math.pow()---") console.log("math.pow(2,3) : "+Math.pow(2,

  • 问题内容: 使用math.pow或**运算符哪个更有效?我什么时候应该使用另一个? 到目前为止,我知道可以返回一个或一个,如果您使用小数,该函数将返回一个浮点数 问题答案: 使用Power运算符将更快,因为它不会产生函数调用的开销。如果您反汇编Python代码,则可以看到以下内容: 请注意,我在这里使用变量作为指数,因为类似常数的表达式实际上是在编译时求值的。 现在,实际上,这种差异并不重要,正如

  • 问题内容: 考虑以下示例: 我不确定Java语言规范中是否有一项规定要加载变量的先前值以便与右侧()进行比较,该变量应按照方括号内的顺序进行计算。 为什么第一个表达式求值,而第二个表达式求值?我本来希望先被评估,然后再与自身()比较并返回。 这个问题与Java表达式中子表达式的求值顺序不同,因为这里绝对不是“子表达式”。需要 加载 它以进行比较,而不是对其进行“评估”。这个问题是特定于Java的,

  • 这个问题与Java表达式中子表达式的求值顺序不同,因为在这里肯定不是“子表达式”。需要加载它进行比较,而不是“求值”。这个问题是特定于Java的,表达式来自一个真实的项目,而不是通常为棘手的面试问题而设计的牵强附会的不切实际的构造。它应该是比较和替换习语的一行替换 它比x86 CMPXCHG指令还要简单,因此在Java中应该使用更短的表达式。

  • 问题内容: 我期望值可以交换。但是它给出x = 0和y = 1。当我尝试使用C语言时,它会给出正确的结果。 问题答案: 您的陈述大致相当于这种扩展形式: 与C语言不同,在Java中,保证二进制运算符的左操作数在右操作数之前进行求值。评估如下: 您可以反转每个xor表达式的参数顺序,以便在再次评估变量之前完成赋值: 这是一个更紧凑的版本,也可以使用: 但这是交换两个变量的真正可怕的方法。使用临时变量

  • 问题内容: Python文档明确指出了调用。但是似乎在许多情况下,情况恰恰相反。它何时何地发生的原因在哪里记录,如何确定我的对象或方法将被调用。 编辑:只是为了澄清,我知道在优选中调用,但是我不清楚为什么优先于调用,而后者是文档状态将发生的原因。 编辑:从马克·迪金森的答案和评论中,它看起来像是: 丰富的比较替代 是它自己的,以它的(以及类似的,等等) 如果左对象是内置类或新样式类,而右对象是其子