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

  • Bigapplemagic

    Bigapplemagi

    22 EYLÜL 2011
  • jkimisyellow

    jkimisyellow

    6 Mayıs 2009
  • TechnoBuffalo

    TechnoBuffal

    8 HAZİRAN 2007