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

  • tinycammonitor

    tinycammonit

    14 Aralık 2010
  • VJ VIMANA

    VJ VIMANA

    3 Mayıs 2007
  • WPBeginner - WordPress Tutorials

    WPBeginner -

    17 Temmuz 2009