我正在測試涉及BigDecimal
的某些代碼的邊界條件,並且我注意到當BigDecimal
使用字符串"1e2147483647"
進行初始化時,它的行爲會出乎意料。它似乎有一個介於0
和1e-2147483647
之間的值。當我嘗試撥打intValue()
時,我收到NegativeArraySizeException
。我應該注意到2147483647
是我係統上整數的最大值。我做錯了什麼,或者這是BigDecimal
的問題?Java BigDecimal可能的溢出錯誤
BigDecimal test = new BigDecimal("1e2147483647");
test.compareTo(new BigDecimal(0)); //Returns 1
test.compareTo(new BigDecimal("1e-2147483647")); //Returns -1
test.intValue(); //Throws NegativeArraySizeException
http://stackoverflow.com/questions/17945985/what-are-the-limits-of-bigdecimal-and-biginteger – kosa
謝謝,我沒有看到這個問題。我只是感到驚訝,它沒有從構造函數中拋出一個NumberFormatException,就像它爲更大的數字一樣。 – DJMatch3000
這個建議比知道的更多,但是'1e-2147483647'是一個相當大的數字。準確地說,'log_2(10^2147483647)/ 8/1024^3 = 0.83 ...'應該產生最小尺寸(以千兆字節爲單位)來表示如整數這樣的大數。也許這是某種內存分配問題? – Turing85