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

  • Bennythecoder

    Bennythecode

    25 Mart 2008
  • celebrateubuntu

    celebrateubu

    23 Mayıs 2011
  • placeboing

    placeboing

    7 Mart 2006