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

前端 未结 3 1506
不思量自难忘°
不思量自难忘° 2020-12-16 16:16

I\'m writing a Java program to calculate how much food it will take to get a monster to a certain level in My Singing Monsters. When I run the program, it says, \"cannot con

相关标签:
3条回答
  • 2020-12-16 16:40

    Math.pow return double and you assigning double value to int this is why it is giving error. You have to downcast it. Like

    int levelMeal = (int)5*(Math.pow(2,level-1));
    
    0 讨论(0)
  • 2020-12-16 16:42

    I think there's typically hardware support on most modern processors for doing floating-point powers, but not integers. Because of that, for a general power, it's actually faster to do Math.power with a double and then convert it back to an int.

    However, in this case there's a faster way to do it for ints. Since you're doing a power of 2, you can just use the bitwise left-shift operator instead:

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

    As Rhymoid pointed out in his comment, that expression can be further simplified to remove the 1:

    int levelMeal = 5<<(level-1);
    
    0 讨论(0)
  • 2020-12-16 16:47

    You'll have to do this:

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

    As you can see in the documentation, Math.pow() returns a double by design, but if you need an int then an explicit cast must be performed.

    0 讨论(0)
提交回复
热议问题