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
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/
jQuery: kısıtlamak " için en iyi y...
Neden "ondalık" geçerli bir ...
Neden't ondalık sayılar ikili düz...
Nasıl tamir "Başvurulan derleme k...
Neden bu (null || !yapar TryParse) &qu...