当前位置: 代码网 > it编程>编程语言>Java > Java中的RoundingMode舍入模式详解

Java中的RoundingMode舍入模式详解

2026年01月19日 Java 我要评论
roundingmode 是 java 中用于控制舍入行为的枚举类,位于 java.math 包中。它常与 bigdecimal、decimalformat 等高精度数值处理类一起使用,以明确指定在精

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舍入模式内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com