SORU
4 Ocak 2011, Salı


ArithmeticException: "Non-sonlandırma ondalık açılımı; kesin gösterilebilir ondalık sonuç"

Neden aşağıdaki kodu dışında aşağıda gösterilen yükseltir mi?

BigDecimal a = new BigDecimal("1.6");
BigDecimal b = new BigDecimal("9.2");
a.divide(b) // results in the following exception.

--

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

CEVAP
4 Ocak 2011, Salı


docs:

MathContext bir nesne 0 hassas bir ayar ile sağlanır (zaman için örneğin, MathContext.SINIRSIZ), aritmetik işlemler tam olarak bu aritmetik hayır MathContext nesne hangi yöntem. (Bu bültenleri önce 5. desteklenen tek davranış)

Bilgisayar bir sonucu olarak kesin sonuç, bir MathContext yuvarlama modu ayarı 0 hassas bir ayar ile nesne kullanılmaz ve bu nedenle önemsiz. İçinde bölmek durumunda, tam sayının bir ondalık sonsuz uzun olabilir genişleme; örneğin, 1 3 bölü.

Eğer bölüm nonterminating ondalık genişleme varsa ve işlemi kesin bir sonuca dönmek için belirtilen bir ArithmeticException atılır. Aksi takdirde, başka bir bölümü kesin sonuç için yapıldı olarak geri döndü. diğer işlemleri.

Düzeltmek için böyle bir şey yapman gerek:

a.divide(b, 2, RoundingMode.HALF_UP)

where 2 is precision and RoundingMode.HALF_UP is rounding mode

Daha fazla ayrıntı: http://jaydeepm.wordpress.com/2009/06/04/bigdecimal-and-non-terminating-decimal-expansion-error/

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Glyn Dewis

    Glyn Dewis

    25 AĞUSTOS 2007
  • Kevin Bruckert

    Kevin Brucke

    30 Aralık 2006
  • TomOdellVEVO

    TomOdellVEVO

    29 Mayıs 2012