zoukankan      html  css  js  c++  java
  • BigDecimal 舍入模式(Rounding mode)介绍

    BigDecimal 舍入模式(Rounding mode)介绍
                                                                                            </h1>
    
                                                                      
                                                                <div class="content" id="articleContent">
                                                    <div class="ad-wrap">
                                                        <p style="margin:0 0 10px 0;"><a data-traceid="blog_detail_above_text_link_1" data-tracepid="blog_detail_above_text_link" style="color:#A00;font-weight:bold;" href="https://my.oschina.net/u/3779583/blog/2413750" target="_blank">什么样的经历,才能领悟成为架构师?
    

    >>>   



    1 RoundingMode介绍

    package java.math;
    
    public enum RoundingMode {
    
        UP(BigDecimal.ROUND_UP),
    
        DOWN(BigDecimal.ROUND_DOWN),
    
        CEILING(BigDecimal.ROUND_CEILING),
    
        FLOOR(BigDecimal.ROUND_FLOOR),
    
        HALF_UP(BigDecimal.ROUND_HALF_UP),
    
        HALF_DOWN(BigDecimal.ROUND_HALF_DOWN),
    
        HALF_EVEN(BigDecimal.ROUND_HALF_EVEN),
    
        UNNECESSARY(BigDecimal.ROUND_UNNECESSARY);
    
        final int oldMode;
    
        private RoundingMode(int oldMode) {
            this.oldMode = oldMode;
        }
    
        public static RoundingMode valueOf(int rm) {
            switch(rm) {
    
            case BigDecimal.ROUND_UP:
                return UP;
    
            case BigDecimal.ROUND_DOWN:
                return DOWN;
    
            case BigDecimal.ROUND_CEILING:
                return CEILING;
    
            case BigDecimal.ROUND_FLOOR:
                return FLOOR;
    
            case BigDecimal.ROUND_HALF_UP:
                return HALF_UP;
    
            case BigDecimal.ROUND_HALF_DOWN:
                return HALF_DOWN;
    
            case BigDecimal.ROUND_HALF_EVEN:
                return HALF_EVEN;
    
            case BigDecimal.ROUND_UNNECESSARY:
                return UNNECESSARY;
    
            default:
                throw new IllegalArgumentException("argument out of range");
            }
        }
    }

    RoundingMode是一个枚举类,有以下几个值:UP,DOWN,CEILING,FLOOR,HALF_UP,HALF_DOWN,HALF_EVEN,UNNECESSARY

    2 舍入模式

    2.1 UP

    public final static int ROUND_UP = 0;

    定义:远离零方向舍入。

    解释:始终对非零舍弃部分前面的数字加 1。注意,此舍入模式始终不会减少计算值的绝对值。

    图示:

    示例:

    输入数字 使用 UP 舍入模式将输入数字舍入为一位数
    5.5 6
    2.5 3
    1.6 2
    1.1 2
    1.0 1
    -1.0 -1
    -1.1 -2
    -1.6 -2
    -2.5 -3
    -5.5 -6


    2.2 DOWN

    public final static int ROUND_DOWN = 1;

    定义:向零方向舍入。

    解释:从不对舍弃部分前面的数字加 1(即截尾)。注意,此舍入模式始终不会增加计算值的绝对值。

    图示:

    示例:

    输入数字 使用 DOWN 舍入模式将输入数字舍入为一位数
    5.5 5
    2.5 2
    1.6 1
    1.1 1
    1.0 1
    -1.0 -1
    -1.1 -1
    -1.6 -1
    -2.5 -2
    -5.5 -5


    2.3 CEILING

    public final static int ROUND_CEILING = 2;

    定义:向正无限大方向舍入。

    解释:如果结果为正,则舍入行为类似于 RoundingMode.UP;如果结果为负,则舍入行为类似于RoundingMode.DOWN。注意,此舍入模式始终不会减少计算值。

    图示:

    示例:

    输入数字 使用 DOWN 舍入模式将输入数字舍入为一位数
    5.5 6
    2.5 3
    1.6 2
    1.1 2
    1.0 1
    -1.0 -1
    -1.1 -1
    -1.6 -1
    -2.5 -2
    -5.5 -5


    2.4 FLOOR

    public final static int ROUND_FLOOR = 3;

    定义:向负无限大方向舍入。

    解释:如果结果为正,则舍入行为类似于 RoundingMode.DOWN;如果结果为负,则舍入行为类似于RoundingMode.UP。注意,此舍入模式始终不会增加计算值。

    图示:

    示例:

    输入数字 使用 DOWN 舍入模式将输入数字舍入为一位数
    5.5 5
    2.5 2
    1.6 1
    1.1 1
    1.0 1
    -1.0 -1
    -1.1 -2
    -1.6 -2
    -2.5 -3
    -5.5 -6


    2.5 HALF_UP (Half指的中点值,例如0.5、0.05,0.15等等)

    public final static int ROUND_HALF_UP = 4;

    定义:向最接近的数字方向舍入,如果与两个相邻数字的距离相等,则向上舍入。

    解释:如果被舍弃部分 >= 0.5,则舍入行为同 RoundingMode.UP;否则舍入行为同RoundingMode.DOWN。注意,此舍入模式就是通常学校里讲的四舍五入。

    图示:

     

    示例:

    输入数字 使用 DOWN 舍入模式将输入数字舍入为一位数
    5.5 6
    2.5 3
    1.6 2
    1.1 1
    1.0 1
    -1.0 -1
    -1.1 -1
    -1.6 -2
    -2.5 -3
    -5.5 -6


    2.6 HALF_DOWN

    public final static int ROUND_HALF_DOWN = 5;

    定义:向最接近的数字方向舍入,如果与两个相邻数字的距离相等,则向下舍入。

    解释:如果被舍弃部分 > 0.5,则舍入行为同 RoundingMode.UP;否则舍入行为同RoundingMode.DOWN。注意,此舍入模式就是通常讲的五舍六入。

    图示:

    示例:

    输入数字 使用 DOWN 舍入模式将输入数字舍入为一位数
    5.5 5
    2.5 2
    1.6 2
    1.1 1
    1.0 1
    -1.0 -1
    -1.1 -1
    -1.6 -2
    -2.5 -2
    -5.5 -5


    2.7 HALF_EVEN

    public final static int ROUND_HALF_EVEN = 6;

    定义:向最接近数字方向舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。

    解释:如果舍弃部分左边的数字为奇数,则舍入行为同 RoundingMode.HALF_UP;如果为偶数,则舍入行为同RoundingMode.HALF_DOWN。注意,在重复进行一系列计算时,根据统计学,此舍入模式可以在统计上将累加错误减到最小。此舍入模式也称为“银行家舍入法”,主要在美国使用。此舍入模式类似于 Java 中对float 和double 算法使用的舍入策略。

    图示:

    示例:

    输入数字 使用 DOWN 舍入模式将输入数字舍入为一位数
    5.5 6
    2.5 2
    1.6 2
    1.1 1
    1.0 1
    -1.0 -1
    -1.1 -1
    -1.6 -2
    -2.5 -2
    -5.5 -6


    2.8 UNNECESSARY

    public final static int ROUND_UNNECESSARY =  7;

    定义:用于断言请求的操作具有精确结果,因此不发生舍入。

    解释:计算结果是精确的,不需要舍入,否则抛出 ArithmeticException。

    示例:

    输入数字 使用 DOWN 舍入模式将输入数字舍入为一位数
    5.5 抛出 ArithmeticException
    2.5 抛出 ArithmeticException
    1.6 抛出 ArithmeticException
    1.1 抛出 ArithmeticException
    1.0 1
    -1.0 -1
    -1.1 抛出 ArithmeticException
    -1.6 抛出 ArithmeticException
    -2.5 抛出 ArithmeticException
    -5.5 抛出 ArithmeticException



                                        </div>
                                            </div>
    
    
                </div>
  • 相关阅读:
    nginx.conf中配置laravel框架站点
    centos6.4下安装php7+nginx+mariadb环境
    Windows Terminal 安装和运行
    微软 WSL 重装操作系统
    Pulumi 如何在 Windows 环境中设置
    Ubuntu 20.04 安装 JDK
    代码的 Lint 是什么意思
    CentOS 8 手动安装 Go 1.16 版本
    Raspberry Pi 安装 go 后提示错误 Exec format error
    系统管理--查看网卡、内存等
  • 原文地址:https://www.cnblogs.com/jpfss/p/9987326.html
Copyright © 2011-2022 走看看