2013-04-11 184 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)