java Math类中的pow方法

不知怎么...我用 这方法有点问题...比如显示 Math.pow(64,1/3)是1而不是4...求大神告诉我改如何解决啊!!!

Math.pow(64,1/3)等价于 Math.pow(64,0)所以结果是1.0

在程序中 1/3并不代表三分之一,因为这里是两个int类型在做除法,结果也是int类型,会自动取整(向下取0了), 所以是0,就可以说明为什么结果是1。执行代码如下

System.out.println(1/3)

运行结果

当然如果使用Math.pow(64,1.0/3.0)结果也不是4,代码如下

System.out.println(Math.pow(64,1.0/3.0))

结果如下

这里1.0/3.0近似等于0.3333333333所以,最后结果为上图所示。

拓展知识

1.0做除数抛运行时异常;两整数商会做取整运算,Float或Double与一个整数做除法运算,则商位Float或者Double类型

2.0可以做除数,得到的是一个分正负的无穷大;当两个数的绝对值均为0.0时候,商等于NaN。当0.0/x,x不等0.0时候

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-19
1/3计算机默认值是0,两个参数的值都应该是double 型
返回第一个参数的第二个参数次幂的值。特殊情况如下:
如果第二个参数为正 0 或负 0,那么结果为 1.0。
如果第二个参数为 1.0,那么结果与第一个参数相同。
如果第二个参数为 NaN,那么结果为 NaN。
如果第一个参数为 NaN,第二个参数非 0,那么结果为 NaN。
如果
第一个参数的绝对值大于 1,并且第二个参数为正无穷大,或者
第一个参数的绝对值小于 1,并且第二个参数为负无穷大,
那么结果为正无穷大。
如果
第一个参数的绝对值大于 1,并且第二个参数为负无穷大,或者
第一个参数的绝对值小于 1,并且第二个参数为正无穷大,
那么结果为正 0。
如果第一个参数的绝对值等于1,并且第二个参数为无穷大,那么结果为 NaN。
如果
第一个参数为正 0,并且第二个参数大于 0,或者
第一个参数为正无穷大,并且第二个参数小于 0,
那么结果为正 0。
如果
第一个参数为正 0,并且第二个参数小于 0,或者
第一个参数为正无穷大,并且第二个参数大于 0,
那么结果为正无穷大。
如果
如果第一个参数为负 0,并且第二个参数大于 0 但不是有限的奇数整数,或者
第一个参数为负无穷大,并且第二个参数小于 0 但不是有限的奇数整数,
那么结果为正 0。
如果
第一个参数为负 0,并且第二个参数为正的有限奇数整数,或者
第一个参数为负无穷大,并且第二个参数为负的有限奇数整数,
那么结果为负 0。
如果
如果第一个参数为负 0,并且第二个参数小于 0 但不是有限的奇数整数,或者
第一个参数为负无穷大,并且第二个参数大于 0 但不是有限的奇数整数,
那么结果为正无穷大。
如果
第一个参数为负 0,并且第二个参数为负的有限奇数整数,或者
第一个参数为负无穷大,并且第二个参数为正的有限奇数整数,
那么结果为负无穷大。
如果第一个参数为小于 0 的有限值,
如果第二个参数为有限的偶数整数,那么结果等于第一个参数绝对值的第二个参数次幂的结果。
如果第二个参数为有限的奇数整数,那么结果等于负的第一个参数绝对值的第二个参数次幂的结果。
如果第二个参数为有限的非整数值,那么结果为 NaN。
如果两个参数都为整数,并且结果恰好可以表示为一个 double 值,那么该结果恰好等于第一个参数的第二个参数次幂的算术结果。
(在前面的描述中,当且仅当浮点数为有限值并且是方法 ceil 的定点数,或者是方法 floor 的定点数时,才可以认为浮点值是整数。当且仅当将某个单参数方法应用到某个值的结果等于该值时,该值才是这个方法的定点值。)
第2个回答  2013-07-19
我们知道static double pow(double a, double b) 返回第一个参数的第二个参数次幂的值。可是这里的1/3计算机在计算时输出的结果为0,所以 Math.pow(64,1/3)就会等于1
第3个回答  2013-07-19
Math.pow(64,1/3)代码的意思是64的3分之一平方,1/3的结果=0,如果要取小数改成1.0/3.0
第4个回答  2013-07-19
问题出在1/3,因为1和3都是int类型,在java中直接运算1/3相当于运算(int)1/3=0,所以你的Math.pow(64,1/3)相当于Math.pow(64,0),64的0次方,其结果就只能为1。
相似回答