Tôi đã thử nghiệm các điều kiện biên trên một số mã liên quan đến BigDecimal
và tôi nhận thấy rằng khi một BigDecimal
được khởi tạo với chuỗi "1e2147483647"
nó hoạt động bất ngờ. Dường như có giá trị giữa 0
và 1e-2147483647
. Khi tôi thử gọi số intValue()
, tôi nhận được NegativeArraySizeException
. Tôi nên lưu ý rằng 2147483647
là giá trị tối đa của một số nguyên trên hệ thống của tôi. Tôi có đang làm gì sai không, hoặc đây có phải là vấn đề với BigDecimal
không?Lỗi tràn BigDecimal Java có thể
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
Cảm ơn, tôi chưa từng thấy câu hỏi đó. Tôi đã rất ngạc nhiên khi nó không ném một NumberFormatException từ constructor giống như nó cho một số lớn hơn một chữ số. – DJMatch3000
Đây là một gợi ý nhiều hơn là biết, nhưng '1e-2147483647' là một con số khá lớn. Để chính xác, 'log_2 (10^2147483647)/8/1024^3 = 0,83 ... 'sẽ tạo ra kích thước tối thiểu (tính bằng Gigabyte) để biểu thị một số lớn như số nguyên. Có lẽ đây là một số loại vấn đề bộ nhớ allocatin? – Turing85