2013-04-11 185 views
8

我正在计算a^(1/n),其中^表示指数。如何计算^(1/n)?

但是,下面的:

Math.pow(8, 1/3) 

回报1.0,而不是返回2.0

这是为什么?

+9

噢。可爱。 :) – 2013-04-11 18:01:42

+10

虽然这个问题可以使用更好的描述,但我并不真正了解所有的降价。对于这里的大多数人来说这可能是微不足道的,但是这种事情(需要进行浮动分割时的整数划分)是一个非常普遍的问题,尤其是在新开发人员中;这个问题肯定会对别人有帮助。 – Saggio 2013-04-11 18:02:42

+1

@Saggio - 对,对初学者来说,这是一个主要的绊脚石,甚至我们中的一些“专家”也会偶尔与它发生冲突(并且花费更多时间解决问题,而不是我们在解决问题之前先承认)。 – 2013-04-11 18:08:55

回答

17

问题是1/3使用integer (truncating) division,结果为零。更改您的代码

Math.pow(8, 1./3); 

(该.转动1.成浮点文字。)

+0

非常感谢。这似乎微不足道,但对我很重要。 – GltknBtn 2013-04-11 18:07:46

+0

@GltknBtn:不客气。每个人都会在某个时候遇到这个问题当这个部门是更复杂的表达的一部分时,情况就更不明显了,就像这里的情况一样。 – NPE 2013-04-11 18:08:24

4

尝试Math.pow(8, (1.0f/3.0f))来代替。

1/3会做一个整数除法,这将给你8^0 = 1

+3

什么,没有解释? – 2013-04-11 18:01:17

+0

这对初级新手来说很直观明显! – 2013-04-11 18:07:39

+2

@HotLicks:如果是这样,这个问题就不存在了。 – 2013-04-11 18:22:50

5

1/3成为0(因为13被当作int文字)。

所以你应该让那些文字浮动/双...

务必:

Math.pow(8, 1f/3)

Math.pow(8, 1./3)

Math.pow(8, 1.0/3)