Stavo testando le condizioni al contorno su un codice che includeva uno BigDecimal
e ho notato che quando un BigDecimal
viene inizializzato con lo String "1e2147483647"
, si comporta in modo imprevisto. Sembra avere un valore compreso tra 0
e 1e-2147483647
. Quando provo a chiamare intValue()
, ottengo uno NegativeArraySizeException
. Devo notare che 2147483647
è il valore massimo di un intero sul mio sistema. Sto facendo qualcosa di sbagliato, o questo è un problema con BigDecimal
?Errore di overflow Java BigDecimal possibile
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
Grazie, non avevo visto quella domanda. Sono rimasto sorpreso che non abbia lanciato una NumberFormatException dal costruttore come fa per un numero più grande di un numero. – DJMatch3000
Questo è più un suggerimento che sapere, ma '1e-2147483647' è un numero piuttosto grande. Per essere precisi, 'log_2 (10^2147483647)/8/1024^3 = 0.83 ...' dovrebbe fornire la dimensione minima (in Gigabyte) per rappresentare un numero così grande come numero intero. Forse questa è una sorta di problema di allocazione della memoria? – Turing85