前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java BigDecimal 的舍入模式(RoundingMode)详解

Java BigDecimal 的舍入模式(RoundingMode)详解

作者头像
用户11325910
发布2024-10-31 18:58:38
900
发布2024-10-31 18:58:38
举报
文章被收录于专栏:楠笙的生活与学习

RoundingMode 是 Java 中用于定义舍入行为的枚举类。它主要用于精确的数字运算,尤其是涉及到小数点的情况下。以下是 RoundingMode 的详细讲解及举例说明:

RoundingMode 常见枚举值

1、UP

  • 向远离零的方向舍入。
  • 例如:1.1 会舍入为 2-1.1 会舍入为 -2

2、DOWN

  • 向接近零的方向舍入。
  • 例如:1.9 会舍入为 1-1.9 会舍入为 -1

3、CEILING

  • 向正无穷方向舍入。
  • 例如:1.1 会舍入为 2-1.1 会舍入为 -1

4、FLOOR

  • 向负无穷方向舍入。
  • 例如:1.9 会舍入为 1-1.9 会舍入为 -2

5、HALF_UP

  • 向最接近的数字舍入,如果距离相等,则向远离零的方向舍入,即四舍五入。
  • 例如:1.5 会舍入为 2-1.5 会舍入为 -2

6、HALF_DOWN

  • 向最接近的数字舍入,如果距离相等,则向接近零的方向舍入。
  • 例如:1.5 会舍入为 1-1.5 会舍入为 -1

7、HALF_EVEN

  • 向最接近的数字舍入,如果距离相等,则向偶数方向舍入(银行家舍入法)。
  • 例如:1.5 会舍入为 22.5 会舍入为 2

8、UNNECESSARY

  • 不允许舍入(如果舍入是必要的,则抛出 ArithmeticException)。

使用示例

下面通过示例来演示如何在 BigDecimal 中使用不同的 RoundingMode

代码语言:javascript
复制
import java.math.BigDecimal;
import java.math.RoundingMode;

public class RoundingModeExample {

    public static void main(String[] args) {
        BigDecimal value1 = new BigDecimal("2.5");
        BigDecimal value2 = new BigDecimal("1.1");
        BigDecimal value3 = new BigDecimal("-1.1");

        System.out.println("Original value: " + value1); // Original value: 2.5
        System.out.println("UP: " + value1.setScale(0, RoundingMode.UP)); // UP: 3
        System.out.println("DOWN: " + value1.setScale(0, RoundingMode.DOWN)); // DOWN: 2
        System.out.println("CEILING: " + value1.setScale(0, RoundingMode.CEILING)); // CEILING: 3
        System.out.println("FLOOR: " + value1.setScale(0, RoundingMode.FLOOR)); // FLOOR: 2
        System.out.println("HALF_UP: " + value1.setScale(0, RoundingMode.HALF_UP)); // HALF_UP: 3
        System.out.println("HALF_DOWN: " + value1.setScale(0, RoundingMode.HALF_DOWN)); // HALF_DOWN: 2
        System.out.println("HALF_EVEN: " + value1.setScale(0, RoundingMode.HALF_EVEN)); // HALF_EVEN: 2

        System.out.println("Original value: " + value2); // Original value: 1.1
        System.out.println("UP: " + value2.setScale(0, RoundingMode.UP)); // UP: 2
        System.out.println("DOWN: " + value2.setScale(0, RoundingMode.DOWN)); // DOWN: 1
        System.out.println("CEILING: " + value2.setScale(0, RoundingMode.CEILING)); // CEILING: 2
        System.out.println("FLOOR: " + value2.setScale(0, RoundingMode.FLOOR)); // FLOOR: 1
        System.out.println("HALF_UP: " + value2.setScale(0, RoundingMode.HALF_UP)); // HALF_UP: 1
        System.out.println("HALF_DOWN: " + value2.setScale(0, RoundingMode.HALF_DOWN)); // HALF_DOWN: 1
        System.out.println("HALF_EVEN: " + value2.setScale(0, RoundingMode.HALF_EVEN)); // HALF_EVEN: 1

        System.out.println("Original value: " + value3); // Original value: -1.1
        System.out.println("UP: " + value3.setScale(0, RoundingMode.UP)); // UP: -2
        System.out.println("DOWN: " + value3.setScale(0, RoundingMode.DOWN)); // DOWN: -1
        System.out.println("CEILING: " + value3.setScale(0, RoundingMode.CEILING)); // CEILING: -1
        System.out.println("FLOOR: " + value3.setScale(0, RoundingMode.FLOOR)); // FLOOR: -2
        System.out.println("HALF_UP: " + value3.setScale(0, RoundingMode.HALF_UP)); // HALF_UP: -1
        System.out.println("HALF_DOWN: " + value3.setScale(0, RoundingMode.HALF_DOWN)); // HALF_DOWN: -1
        System.out.println("HALF_EVEN: " + value3.setScale(0, RoundingMode.HALF_EVEN)); // HALF_EVEN: -1
    }
}

总结

  • UPCEILING 类似,但 CEILING 针对正数和负数的结果不同。
  • DOWNFLOOR 类似,但 FLOOR 针对正数和负数的结果不同。
  • HALF_UPHALF_DOWNHALF_EVEN 都是四舍五入策略,区别在于如何处理刚好在中间的情况(如 0.5)。

选择适当的 RoundingMode 可以确保在金融计算、统计分析等领域的结果精确且符合业务需求。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024/07/01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RoundingMode 常见枚举值
    • 1、UP
      • 2、DOWN
        • 3、CEILING
          • 4、FLOOR
            • 5、HALF_UP
              • 6、HALF_DOWN
                • 7、HALF_EVEN
                  • 8、UNNECESSARY
                  • 使用示例
                  • 总结
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档