SORU
1 Temmuz 2015, ÇARŞAMBA


Olası Bir Taşma Hata Java BigDecimal

Bazı kodlar ** 1 ve BigDecimal Dize ile başlatılır "1e2147483647" bir zaman beklenmedik bir davranış olduğunu fark ettim ve ilgili sınır koşulları test ettim. 0 1e-2147483647 arasında bir değer gibi görünüyor. I intValue(), arama çalıştığınızda NegativeArraySizeException olsun. 2147483647 benim sistemde bir tamsayı maksimum değer olduğunu dikkat etmelisiniz. Ben yanlış bir şey yapıyorum, ya da bu BigDecimal bir sorunu mu var?

BigDecimal test = new BigDecimal("1e2147483647");

test.compareTo(new BigDecimal(0));  //Returns 1
test.compareTo(new BigDecimal("1e-2147483647"));  //Returns -1
test.intValue();  //Throws NegativeArraySizeException

CEVAP
1 Temmuz 2015, ÇARŞAMBA


Hayır, okunaklı bir hata var gibi görünüyor. Hata JDK7 sunuyor ama JDK8 sabit. Sizin değerler BigDecimals olarak doğru bir şekilde temsil edilebilir ve doğru şekilde davranır, ama yok.

Çizgi the source code of BigDecimal, 2585, this.precision() izleme, 1, ve this.scale -2147483647. this.precision() - this.scale Bu nedenle taşmaları, ve aşağıdaki taşma doğru işlenmiyor.

Bu hata, 19* *doing the subtraction in long arithmetic JDK8.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DavidParody

    DavidParody

    17 EKİM 2009
  • Fubar Protocol

    Fubar Protoc

    21 AĞUSTOS 2010
  • RealPapaPit

    RealPapaPit

    16 Mart 2009