2012-03-29 220 views
6

我無法找到爲什麼我得到一個java.lang.ArithmeticException: Invalid operation,而使用大十進制。java BigDecimal arithmaticException無效操作

public static String E (int exponent, String value){ 
BigDecimal ten= new BigDecimal("10"); 
BigDecimal tempValue=new BigDecimal (value); 
return tempValue.multiply(ten.pow(exponent)).toString(); 
} 

一些指數的值有如-27。有沒有什麼辦法解決這個問題,因爲很難用很多零來存儲原始值。我選擇了BigDecimal,因爲我需要精確。

謝謝

回答

4

如果你提出的東西負指數,你必須指定一個BigDecimal.pow(int, MathContext)所以MathContext它知道多少精度使用 - 否則,BigDecimal會盡量把它計算到無限精度,這是對某些值不可能。

(除非你可以絕對相信你正在做的工作有一個有限位數精確的結果。)

+0

我絕對相信它沒有無限精度。儘管我仍然遇到了這個錯誤。使用double將不會達到儘可能遠,而執行某些操作時傾向於在0附近完成。我沒有看到如何關閉某個東西可以實現無限精度,並且科學計算器可以將值保持爲-99。否則會有更好的方式來表示這個? – 2012-03-29 21:28:21

+0

你能給我們例外的堆棧跟蹤嗎? – 2012-03-29 21:51:09

+1

@ErrorMessages'pow(int)'將在給定負數時拋出ArithmeticException。總是。 http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#pow%28int%29 – Joni 2012-03-29 21:54:45

2

要通過10的倍數乘以一個BigDecimal,它可能更清晰的閱讀器(也更有效率)使用movePointLeftmovePointRight

而不是tempValue.multiply(ten.pow(exponent))您可以使用tempValue.movePointRight(exponent)