10_全面分析java.math.RoundingMode枚举

本文详细介绍了java.math.RoundingMode枚举,包括其继承关系和各种枚举值的作用,如CEILING、FLOOR、DOWN、HALF_UP、HALF_DOWN、HALF_EVEN以及UNNECESSARY,并探讨了这些舍入模式在实际运算中的具体行为。

1、枚举 RoundingMode的继承关系

java.math
枚举 RoundingMode

java.lang.Object

  java.lang.Enum<RoundingMode>

      java.math.RoundingMode

所有已实现的接口:

Serializable, Comparable<RoundingMode>

 

2、CEILING 的作用

 向正无限大方向舍入的舍入模式。

 

3、FLOOR的作用

向负无限大方向舍入的舍入模式。

 

4、UP的作用

远离零方向舍入的舍入模式。

 

5、Down的作用

向零方向舍入的舍入模式。

 

6、HALF_UP的作用

       四舍五入

 

7、HALF_DOWN的作用

       五舍六入

 

8、HALF_EVEN的作用

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

输入数字

使用 HALF_EVEN 舍入模式
将输入数字舍入为一位数

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

 

9、public static final RoundingMode UNNECESSARY的作用

用于断言请求的操作具有精确结果的舍入模式,因此不需要舍入。如果对生成精确结果的操作指定此舍入模式,则抛出 ArithmeticException。

输入数字

使用 UNNECESSARY 舍入模式
将输入数字舍入为一位数

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

 

10、RoundingMode的方法

返回与 BigDecimal 中遗留整数舍入模式常量对应的 RoundingMode 对象。

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");

    }

}

 

 

### JavaRoundingMode 的使用方法及示例 #### 什么是 RoundingMode? `RoundingMode` 是 `java.math.RoundingMode` 枚举的一部分,用于定义如何对数字进行舍入操作。它提供了一系列预定义的舍入策略,适用于各种场景。 以下是常见的几种 `RoundingMode` 及其含义: - **HALF_UP**: 这是最常用的四舍五入方式,当小数部分等于或大于 0.5 时向上舍入[^1]。 - **HALF_DOWN**: 类似于 HALF_UP,但在小数部分小于 0.5 时不改变原,在等于 0.5 时向下舍入。 - **HALF_EVEN**: 银行家舍入法,也称为“向最近偶数舍入”。如果舍弃的部分正好是中间,则会调整到最接近的偶数。 - **UP**: 总是远离零方向舍入,无论小数部分是多少都会增加绝对[^3]。 - **DOWN**: 始终朝零的方向舍入,不会更改原始的小数位[^3]。 - **CEILING**: 向正无穷大方向舍入,对于正表现为向上取整;而对于负则保持不变[^3]。 - **FLOOR**: 向负无穷大方向舍入,对于正保持不变;但对于负表现为向下取整[^3]。 #### 如何在代码中使用 RoundingMode? 下面是一个简单的例子展示如何通过 BigDecimal 设置不同的 RoundingMode 并执行相应的运算逻辑: ```java import java.math.BigDecimal; import java.math.RoundingMode; public class Main { public static void main(String[] args) { BigDecimal number = new BigDecimal("123.456"); System.out.println(number.setScale(2, RoundingMode.HALF_UP)); // 输出: 123.46 【四舍五入】 System.out.println(number.setScale(2, RoundingMode.HALF_DOWN)); // 输出: 123.45 【五舍六入】 System.out.println(number.setScale(2, RoundingMode.HALF_EVEN)); // 输出: 123.46 【银行家算法】 // 测试其他模式 System.out.println(new BigDecimal("-1.6").setScale(0, RoundingMode.DOWN)); // 输出: -1 【向零靠近】 System.out.println(new BigDecimal("-1.6").setScale(0, RoundingMode.FLOOR)); // 输出: -2 【向更小靠拢】 } } ``` 以上程序展示了几个典型的 `RoundingMode` 应用实例以及它们的行为差异。注意每种模式的具体行为可能因输入数据的不同而有所变化。 #### 关键点总结 - 不同的 `RoundingMode` 提供了灵活的选择来满足特定业务需求下的精确控制[^1]。 - 对于财务计算推荐采用 `HALF_EVEN`(即银行家舍入),因为它可以减少累积误差的影响。 - 如果需要自定义格式化器并指定舍入规则,可以通过调用 `NumberFormat.setRoundingMode()` 方法实现[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值