我是靠谱客的博主 完美鸡翅,最近开发中收集的这篇文章主要介绍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中的精度控制规则2.使用BigDecimal除法运算精度控制3.使用BigDecimal静态方法做精度控制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部