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

  • Plugable

    Plugable

    19 Mayıs 2010
  • Schmittastic Jr.

    Schmittastic

    19 Mart 2013
  • TechBalance

    TechBalance

    12 HAZİRAN 2011