RoundingMode的解释

在 Java 的 BigDecimal 中,RoundingMode 是一个枚举类型,用于指定舍入模式(即四舍五入规则)。当你使用 setScale() 或其他需要进行小数位舍入的方法时,必须提供一个 RoundingMode 模式来控制如何处理多余的精度。

RoundingMode.DOWN 解释

  • 含义: 向零方向舍入(即截断多余的小数部分,不进行进位)。
  • 适用场景: 例如金融业务中“只舍不入”的计费逻辑、计算折扣时防止多收用户费用。
  • 示例:

1.2349

→ 1.23

1.2351

→ 1.23

-1.2351

→ -1.23

无论小数点后第三位是什么,都会被直接舍去。

📌 RoundingMode 支持的 8 种方式

以下是 Java 中 RoundingMode 枚举支持的所有舍入方式及其行为说明:

UP

远离零方向舍入

1.23 → 1.24

,

-1.23 → -1.24

DOWN

向零方向舍入(截断)

1.26 → 1.2

,

-1.26 → -1.2

CEILING

向正无穷方向舍入

1.23 → 1.24

,

-1.23 → -1.2

FLOOR

向负无穷方向舍入

1.26 → 1.2

,

-1.26 → -1.27

HALF_UP

四舍五入

1.245 → 1.25

,

1.244 → 1.24

HALF_DOWN

五舍六入(靠近零方向的五不进位)

1.245 → 1.24

,

1.246 → 1.25

HALF_EVEN

银行家舍入法(偶数优先)

1.244 → 1.24

,

1.245 → 1.24

(如果前一位是偶数)<br>

1.255 → 1.26

(奇数则进位)

UNNECESSARY

不允许舍入,若存在多余位数抛异常

若设置

.setScale(2, RoundingMode.UNNECESSARY)

且有小数位超过两位,则会抛出 ArithmeticException

🧠 推荐使用规范(来自项目记忆)

根据 [浮点数精度处理规范](file://D:\project\mall\scp-java\supplier-captcha\src\main\java\com\slodon\supplier\captcha\util\Config.java),在涉及金额、温度等关键数值时:

  • 推荐使用 RoundingMode.DOWN(避免因进位造成额外收费或误差累积)
  • 对于统计类数据可使用 RoundingMode.HALF_UP(如展示用数据)
  • 禁止使用默认构造函数中的隐式舍入,应显式指定 RoundingMode

✅ 示例代码:不同舍入方式对比

import java.math.BigDecimal;
import java.math.RoundingMode;

public class RoundingExample {
    public static void main(String[] args) {
        BigDecimal value = new BigDecimal("1.265");

        System.out.println("RoundingMode.DOWN:    " + value.setScale(2, RoundingMode.DOWN));
        System.out.println("RoundingMode.UP:      " + value.setScale(2, RoundingMode.UP));
        System.out.println("RoundingMode.HALF_UP: " + value.setScale(2, RoundingMode.HALF_UP));
        System.out.println("RoundingMode.FLOOR:   " + value.setScale(2, RoundingMode.FLOOR));
        System.out.println("RoundingMode.CEILING: " + value.setScale(2, RoundingMode.CEILING));
        System.out.println("RoundingMode.HALF_EVEN:" + value.setScale(2, RoundingMode.HALF_EVEN));
    }
}

输出:

RoundingMode.DOWN:    1.26
RoundingMode.UP:      1.27
RoundingMode.HALF_UP: 1.27
RoundingMode.FLOOR:   1.26
RoundingMode.CEILING: 1.27
RoundingMode.HALF_EVEN: 1.26

📋 总结

RoundingMode.DOWN

✅ 推荐

金融、计费、支付等对精度敏感场景

RoundingMode.HALF_UP

⚠️ 视情况

展示用途、非关键计算

RoundingMode.HALF_EVEN

⚠️ 视情况

统计类计算,避免系统性偏差

RoundingMode.UP

/

FLOOR

/

CEILING

⚠️ 特殊场景

用于特定数学需求

RoundingMode.UNNECESSARY

✅ 关键验证

如果你期望输入无多余小数,可强制检查精度

如果你正在开发财务、计费模块,建议统一使用 RoundingMode.DOWN 来保证一致性与安全性。

#计算机有哪些岗位值得去?##2023毕业生求职有问必答##牛客创作赏金赛##应届生,你找到工作了吗#
职保镖-扶你上马 文章被收录于专栏

知识分享,交天下朋友,扶你上马,送你一层,职业规划,面试指导、高薪谈判、背调辅助

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务