2011-09-18 95 views
-1

如何乘以* 10 ^( - 20)。我找不到任何對數函數,所以我希望會有一些其他的函數用於乘以非常小或非常大的數字

+3

爪哇'doubles'覆蓋範圍4.9 * 10^-324〜1.7 * 10^308,陽性或陰性。夠了嗎?如果是這樣,你可以使用普通的'*'運算符。 – Douglas

+2

數學實用課有很多對數方法,但我支持道格拉斯的評論,如果這是一個答案,我會對它投票。 –

+2

你的意思是乘以1e-20? –

回答

0

我不會使用日誌功能,我會用Math.pow

double d = a * Math.pow(10, -20); 
+1

Java支持浮點文字,所以你可以寫:'a * 1.0e-20' – Douglas

1

您可以使用BigDecimal類,它可以存儲較大的值用於計算。

+1

爲什麼這個答案給出了-1? OP在哪裏提到浮點值?這個問題最近有過修改嗎?即使他使用的是浮點數,對非常小的數字進行計算並使用浮點數也會導致很多問題,您可以通過使用類BigDecimal來避免這些問題。這是關鍵,要保持準確性並避免浮點運算出現的問題。 – Asaf

+0

@JimLewis - 在使用浮動/雙精度進行計算時,沒有使用BigDecimal的預防 - 相反,它更安全並減少了使用浮點數和雙精度類型的缺陷。看看[這裏](http://www.ibm.com/developerworks/java/library/j-jtp0114/)或[這裏](http://stackoverflow.com/questions/6320209/javawhy-should-我們使用bigdecimal而不是double-in-the-real-world) –

+0

@inistel:我被你的原始答案中的第一句話所誤導,其中指出:「這個類表示不變的整數長度。」但我現在看到它也可以表示非整數。我仍然認爲這不是OP應該研究的解決方案,但我會很高興地取消掉落。 –

3

Java doubles覆蓋範圍4.9 * 10^-324至1.7 * 10^308,正數或負數。如果您的數字在該範圍內,並且您很樂意使用浮點精度,則可以使用正常的*運算符。

Math.log方法的文檔是here