วิธีการแก้ปัญหา “Non-terminating decimal expansion; no exact representable decimal result” ในการใช้ BigDecimal

หากว่าใครใช้ java, groovy ในการพัฒนาโปรแกรมต่างๆ แล้วใช้ Bigdecimal ในการคำนวณค่าต่างๆโดยเฉพาะการหารตัวเลข บางทีท่านอาจจะเจอปัญหาแบบผมก็ได้ ปัญหานั้นก็คือ

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

ปัญหานี้เกิดจากการหารตัวเลขสองตัวแล้วทำให้เกิดเลขจุุดทศนิยมไม่มีที่สิ้นสุด เช่น

package division;

import java.math.BigDecimal;

final public class Main
{
    public static void main(String[] args)
    {
        BigDecimal a = new BigDecimal(2);
        BigDecimal b = new BigDecimal(3);

        System.out.println(a.divide(b)); // ทำให้เกิด Error ค่าที่ได้คือ 0.6666...
    }
}

วิธีแก้ปัญหา

package division;

import java.math.BigDecimal;

final public class Main
{
    public static void main(String[] args)
    {
        BigDecimal a = new BigDecimal(2);
        BigDecimal b = new BigDecimal(3);

        // แก้แบบนี้ divide(ตัวหาร, หลักของทศนิยม, ปัดเศษ)
       a.divide(b, 4, RoundingMode.CEILING); // => 0.6667
       a.divide(b, 4, RoundingMode.FLOOR);   // => 0.6666
    }
}

About Nop

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.
    Blogger Comment

0 comments:

Post a Comment