我是靠谱客的博主 完美鸡翅,这篇文章主要介绍BigDecimal精度控制1. BigDecimal中的精度控制规则2.使用BigDecimal除法运算精度控制3.使用BigDecimal静态方法做精度控制,现在分享给大家,希望可以做个参考。

1. BigDecimal中的精度控制规则

ROUND_UP //不管保留数字后面是大是小(0除外)都会进1

ROUND_DOWN //保留设置数字,后面所有直接去除

ROUND_HALF_UP //常用的四舍五入

ROUND_HALF_DOWN //五舍六入

ROUND_CEILING //向正无穷方向舍入

ROUND_FLOOR //向负无穷方向舍入

ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN

2.使用BigDecimal除法运算精度控制

BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)  第一参数表示除数,第二个参数表示小数点后保留位数,第三个参数表示取舍规则

@Test
    public void test2() {

        //使用divide做除法精度控制
        BigDecimal a = new BigDecimal("1.333333");
        BigDecimal b = new BigDecimal("1.444444");
        BigDecimal c = new BigDecimal("1.5555555");
        BigDecimal d = new BigDecimal("1.6666666");
        BigDecimal e = new BigDecimal("1");

        //ROUND_UP          //不管保留数字后面是大是小(0除外)都会进1
        double di1 = a.divide(e, 3, BigDecimal.ROUND_UP).doubleValue();// 1.334

        //ROUND_DOWN        //保留设置数字,后面所有直接去除
        double di2 = a.divide(e, 3, BigDecimal.ROUND_DOWN).doubleValue();// 1.333

        //ROUND_HALF_UP     //常用的四舍五入
        double di3 = b.divide(e, 3, BigDecimal.ROUND_HALF_UP).doubleValue();// 1.444
        double di9 = c.divide(e, 3, BigDecimal.ROUND_HALF_UP).doubleValue();// 1.556

        //ROUND_HALF_DOWN   //四舍五入
        double di4 = c.divide(e, 3, BigDecimal.ROUND_HALF_DOWN).doubleValue();// 1.556
        double di10 = d.divide(e, 3, BigDecimal.ROUND_HALF_DOWN).doubleValue();// 1.667

        //ROUND_CEILING     //向正无穷方向舍入
        double di5 = a.divide(e, 3, BigDecimal.ROUND_CEILING).doubleValue();// 1.334

        //ROUND_FLOOR       //向负无穷方向舍入
        double di6 = a.divide(e, 3, BigDecimal.ROUND_FLOOR).doubleValue();// 1.333

        //ROUND_HALF_EVEN   //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
        double di7 = a.divide(e, 3, BigDecimal.ROUND_HALF_EVEN).doubleValue();// 1.333

        System.out.println("di1 = " + di1);
        System.out.println("di2 = " + di2);
        System.out.println("di3 = " + di3);
        System.out.println("di9 = " + di9);
        System.out.println("di4 = " + di4);
        System.out.println("di10 = " + di10);
        System.out.println("di5 = " + di5);
        System.out.println("di6 = " + di6);
        System.out.println("di7 = " + di7);
    }

3.使用BigDecimal静态方法做精度控制

@Test
    public void test3() {

        //使用divide做除法精度控制
        BigDecimal a = new BigDecimal("1.333333");
        BigDecimal b = new BigDecimal("1.444444");
        BigDecimal c = new BigDecimal("1.5555555");
        BigDecimal d = new BigDecimal("1.6666666");

        //ROUND_UP          //不管保留数字后面是大是小(0除外)都会进1
        double di1 = a.setScale(3, BigDecimal.ROUND_UP).doubleValue();//1.334

        //ROUND_DOWN        //保留设置数字,后面所有直接去除
        double di2 = a.setScale(3, BigDecimal.ROUND_DOWN).doubleValue();//1.333

        //ROUND_HALF_UP     //常用的四舍五入
        double di3 = b.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();//1.444
        double di9 = c.setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue();//1.556

        //ROUND_HALF_DOWN   //四舍五入
        double di4 = c.setScale(3, BigDecimal.ROUND_HALF_DOWN).doubleValue();//1.556
        double di10 = d.setScale(3, BigDecimal.ROUND_HALF_DOWN).doubleValue();//1.667
        double di11 = b.setScale(3, BigDecimal.ROUND_HALF_DOWN).doubleValue();//1.444

        //ROUND_CEILING     //向正无穷方向舍入
        double di5 = a.setScale(3, BigDecimal.ROUND_CEILING).doubleValue();//1.334

        //ROUND_FLOOR       //向负无穷方向舍入
        double di6 = a.setScale(3, BigDecimal.ROUND_FLOOR).doubleValue();//1.333

        //ROUND_HALF_EVEN   //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
        double di7 = a.setScale(3, BigDecimal.ROUND_HALF_EVEN).doubleValue();//1.333

        System.out.println("di1 = " + di1);
        System.out.println("di2 = " + di2);
        System.out.println("di3 = " + di3);
        System.out.println("di9 = " + di9);
        System.out.println("di4 = " + di4);
        System.out.println("di10 = " + di10);
        System.out.println("di11 = " + di11);
        System.out.println("di5 = " + di5);
        System.out.println("di6 = " + di6);
        System.out.println("di7 = " + di7);
    }

最后

以上就是完美鸡翅最近收集整理的关于BigDecimal精度控制1. BigDecimal中的精度控制规则2.使用BigDecimal除法运算精度控制3.使用BigDecimal静态方法做精度控制的全部内容,更多相关BigDecimal精度控制1. BigDecimal中内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(148)

评论列表共有 0 条评论

立即
投稿
返回
顶部