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

  • Film Riot

    Film Riot

    16 NİSAN 2006
  • tutvid

    tutvid

    19 AĞUSTOS 2006
  • Wii Minute Radio

    Wii Minute R

    31 Mayıs 2008