Java中的RoundingMode舍入模式详解

 更新时间:2026年01月19日 10:32:01   作者:lagrahhn  
Java中的RoundingMode枚举类用于控制高精度数值处理时的舍入行为,提供多种舍入模式,本文给大家介绍Java的RoundingMode舍入模式,感兴趣的朋友跟随小编一起看看吧

RoundingMode 是 Java 中用于控制舍入行为的枚举类,位于 java.math 包中。它常与 BigDecimalDecimalFormat 等高精度数值处理类一起使用,以明确指定在精度不足或需要截断时应如何舍入。

一、RoundingMode 枚举值(共 8 种)

枚举常量说明对应的舍入规则(以正数为例)
UP远离零方向舍入1.1 → 2,1.9 → 2,-1.1 → -2
DOWN向零方向舍入(截断)1.9 → 1,-1.9 → -1
CEILING向正无穷方向舍入正数同 UP,负数同 DOWN
FLOOR向负无穷方向舍入正数同 DOWN,负数同 UP
HALF_UP四舍五入(最常用)1.5 → 2,1.4 → 1,-1.5 → -2
HALF_DOWN五舍六入1.5 → 1,1.6 → 2,-1.5 → -1
HALF_EVEN银行家舍入法(四舍六入五成双)1.5 → 2,2.5 → 2,3.5 → 4(使结果为偶数)
UNNECESSARY不需要舍入,若需舍入则抛出 ArithmeticException仅用于精确计算,如 1.00 保留两位小数没问题,但 1.01 保留一位会报错

⚠️ 注意:HALF_UP 是我们日常说的“四舍五入”,而 HALF_EVEN 是 IEEE 754 推荐的标准舍入方式,可减少累积误差。

二、示例

import java.math.BigDecimal;  
import java.math.RoundingMode;  
public class RoundingModeTest {  
    public static void main(String[] args) {  
        BigDecimal value = new BigDecimal("2.555");  
        // RoundingMode.UP 指定位向上取整  
        System.out.println("RoundingMode.UP 指定位向上取整");  
        System.out.println(value.setScale(0,RoundingMode.UP));  
        System.out.println(value.setScale(1,RoundingMode.UP));  
        // RoundingMode.UP 指定位向下取整  
        System.out.println("RoundingMode.DOWN 指定位向下取整");  
        System.out.println(value.setScale(0,RoundingMode.DOWN));  
        System.out.println(value.setScale(1,RoundingMode.DOWN));  
        // RoundingMode.CEILING 指定位向最近整数取整,如果距离两边一样远,则向上取整      
System.out.println("RoundingMode.CEILING 指定位向最近整数取整,如果距离两边一样远,则向上取整");  
        System.out.println(value.setScale(0,RoundingMode.CEILING));  
        System.out.println(value.setScale(1,RoundingMode.CEILING));  
        System.out.println(value.setScale(2,RoundingMode.CEILING));  
        // RoundingMode.FLOOR 指定位向最近整数取整,如果距离两边一样远,则向下取整  
        System.out.println("RoundingMode.FLOOR 指定位向最近整数取整,如果距离两边一样远,则向下取整");  
        System.out.println(value.setScale(0,RoundingMode.FLOOR));  
        System.out.println(value.setScale(1,RoundingMode.FLOOR));  
        System.out.println(value.setScale(2,RoundingMode.FLOOR));  
        // RoundingMode.HALF_UP 四舍五入  
        System.out.println("RoundingMode.HALF_UP 四舍五入");  
        System.out.println(value.setScale(0,RoundingMode.HALF_UP));  
        System.out.println(value.setScale(1,RoundingMode.HALF_UP));  
        System.out.println(value.setScale(2,RoundingMode.HALF_UP));  
        // RoundingMode.HALF_DOWN 五舍六入  
        System.out.println("RoundingMode.HALF_DOWN 五舍六入");  
        System.out.println(value.setScale(0,RoundingMode.HALF_DOWN));  
        System.out.println(value.setScale(1,RoundingMode.HALF_DOWN));  
        System.out.println(value.setScale(2,RoundingMode.HALF_DOWN));  
        // RoundingMode.HALF_EVEN 银行家舍入,四舍六入,五成双,看前一位  
        System.out.println("RoundingMode.HALF_EVEN 银行家舍入,四舍六入,五成双,看前一位");  
        System.out.println(value.setScale(0,RoundingMode.HALF_EVEN));  
        System.out.println(value.setScale(1,RoundingMode.HALF_EVEN));  
        System.out.println(value.setScale(2,RoundingMode.HALF_EVEN));  
        // RoundingMode.UNNECESSARY 不进行舍入,如果舍入位不为0,则抛出ArithmeticException异常  
        System.out.println("RoundingMode.UNNECESSARY 不进行舍入,如果舍入位不为0,则抛出ArithmeticException异常");  
    }  
}
RoundingMode.UP 指定位向上取整
3
2.6
RoundingMode.DOWN 指定位向下取整
2
2.5
RoundingMode.CEILING 指定位向最近整数取整,如果距离两边一样远,则向上取整
3
2.6
2.56
RoundingMode.FLOOR 指定位向最近整数取整,如果距离两边一样远,则向下取整
2
2.5
2.55
RoundingMode.HALF_UP 四舍五入
3
2.6
2.56
RoundingMode.HALF_DOWN 五舍六入
3
2.6
2.55
RoundingMode.HALF_EVEN 银行家舍入,四舍六入,五成双,看前一位
3
2.6
2.56
RoundingMode.UNNECESSARY 不进行舍入,如果舍入位不为0,则抛出ArithmeticException异常

到此这篇关于Java中的RoundingMode舍入模式详解的文章就介绍到这了,更多相关java roundingmode舍入模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java设计模式之策略模式详解

    Java设计模式之策略模式详解

    这篇文章主要为大家详细介绍了Java设计模式之策略模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • MyBatis无缝转MyBatis-plus的基本使用

    MyBatis无缝转MyBatis-plus的基本使用

    本文介绍了使用MyBatis-plus来优化MyBatis的使用,包括引入依赖、改造Mapper、实体类注解使用、Service层方法改造等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • SpringBoot实现多租户架构

    SpringBoot实现多租户架构

    在SpringBoot中可以通过多数据源和动态路由来实现多租户机制,本文主要介绍了SpringBoot实现多租户架构,具有一定的参考价值,感兴趣的可以里哦啊接一下
    2024-03-03
  • Java中MapStruct映射处理器报错的问题解决

    Java中MapStruct映射处理器报错的问题解决

    MapStruct是一个强大的Java映射框架,它能够在编译时生成映射代码,,本文主要介绍了Java中MapStruct映射处理器报错的问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • SpringBoot 如何自定义项目启动信息打印

    SpringBoot 如何自定义项目启动信息打印

    这篇文章主要介绍了SpringBoot 如何自定义项目启动信息打印方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • java中的类型自动转换机制解析

    java中的类型自动转换机制解析

    这篇文章主要介绍了java中的类型自动转换机制,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • java实现String字符串处理各种类型转换

    java实现String字符串处理各种类型转换

    在日常的程序开发中,经常会涉及到不同类型之间的转换,本文主要介绍了String字符串处理各种类型转换,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • 浅谈Springboot下引入mybatis遇到的坑点

    浅谈Springboot下引入mybatis遇到的坑点

    这篇文章主要介绍了Springboot下引入mybatis遇到的坑点,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • IntelliJ IDEA 2023版本创建Spring项目时Java只能选择17或21的问题解决方法

    IntelliJ IDEA 2023版本创建Spring项目时Java只能选择17或21的问题解决方法

    spring-boot是一个基于Java的开源框架,用于快速构建生产级别的应用程序,这篇文章主要给大家介绍了关于IntelliJ IDEA 2023版本创建Spring项目时Java只能选择17或21的问题解决方法,需要的朋友可以参考下
    2024-07-07
  • MyBatis-Plus通用枚举的实现示例

    MyBatis-Plus通用枚举的实现示例

    本文主要介绍 MyBatis-Plus 通用枚举,及通过具体案例进行演示实现流程和原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-12-12

最新评论