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

  • Doug Bernards

    Doug Bernard

    7 Kasım 2007
  • Sali Kaceli

    Sali Kaceli

    24 ŞUBAT 2009
  • TopDJMag TV

    TopDJMag TV

    29 Temmuz 2010