6 Nisan 2013 Cumartesi


Arkadaşlar merhaba, bu makalede "Non-terminating decimal expansion" istisnası, normal şartlar altında ne sebepten alındığı hakkında kısaca bilgi vermeye çalışacağım..Bigdecimal değerler için illaki tam bölünmeyen sayılarla işlemler yaptığınız olmuştur.. Bu hata mesajı da tam olarak bununla alakalıdır. Bazı sayılar bölme işlemi sonucunda kendini virgülden sonra sonsuz tekrar edebilir...Örnek vermek gerekirse;

BigDecimal a = new BigDecimal("124");BigDecimal b = new BigDecimal("3"); a.divide(b) // results in the following exception.
normal şartlar altında bir sınırlama getirmediğimiz takdirde sonuç : 41.33333333333333333333333.....şeklinde tekrar eder ve sonucunda bu hata mesajını alırız... Tabiki bunu engellemek için java'nın bir yöntemi var. Nasıl mı?

a.divide(b, 2, RoundingMode.HALF_UP)
şimdi sonuç : 41.33 ' tür...


a.divide(b, 3, RoundingMode.HALF_UP)
şimdi ise sonuç :41.333 ' tür

görüldüğü üzere sonuç virgülden sonra belirlediğimiz sayıya göre yuvarlanmıştır...

Aşağıda ise sadece bir BigDecimal değerin virgülden sonraki hane sayısını, yani yuvarlama yapılacak sayıyı belirleme işlemi yer almaktadır.


BigDecimal sayi = new BigDecimal(100); 
BigDecimal yeniSayi= sayi.setScale(2, sayi.ROUND_HALF_DOWN); 

sonuç :100.00


java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1603)
at barcode.TarihHesapla.tarihEkle(TarihHesapla.java:90)
at barcode.CariListe.jXHyperlink7ActionPerformed(CariListe.java:3397)
at barcode.CariListe.access$700(CariListe.java:36)
at barcode.CariListe$8.actionPerformed(CariListe.java:1503)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at org.jdesktop.swingx.JXHyperlink.fireActionPerformed(JXHyperlink.java:225)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
at java.awt.Component.processMouseEvent(Component.java:6288)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6053)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4651)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:616)
at java.awt.EventQueue$2.run(EventQueue.java:614)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

0 yorum :

Yorum Gönder