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 推荐的标准舍入方式,可减少累积误差。


二、示例

java 复制代码
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异常");  
    }  
}
txt 复制代码
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异常
相关推荐
小短腿的代码世界2 小时前
Qt实时盈亏计算深度解析:从持仓数据到动态盈亏展示
开发语言·qt
小康小小涵2 小时前
基于ESP32S3实现无人机RID模块底层源码编译
linux·开发语言·python
lzjava20242 小时前
Python的函数
开发语言·python
掌心向暖RPA自动化3 小时前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa
Awesome Baron3 小时前
skill、tool calling、MCP区别
开发语言·人工智能·python
日取其半万世不竭3 小时前
Minecraft Java版社区服务器搭建教程(Linux,适合新手)
java·linux·服务器
Python私教3 小时前
GenericAgent PySide6 桌面应用深度解析:悬浮按钮 + 聊天面板的原生 Qt 方案
开发语言·数据库·qt
矢志航天的阿洪3 小时前
用 MATLAB 控制 STK Aviator:从零搭建一个 AWACS 支援作战场景
开发语言·matlab
澈2073 小时前
STL迭代器:容器遍历的万能钥匙
开发语言·c++
TeamDev3 小时前
JxBrowser 9.0.0 版本发布啦!
java·前端·混合应用·jxbrowser·浏览器控件·跨平台渲染·原声输入