
本文介绍如何使用decimalformat配合roundingmode.down,强制将0.21–0.29等浮点数统一向下截断为0.2,避免默认的四舍五入行为。
本文介绍如何使用decimalformat配合roundingmode.down,强制将0.21–0.29等浮点数统一向下截断为0.2,避免默认的四舍五入行为。
在Java中,DecimalFormat 默认采用 RoundingMode.HALF_EVEN(银行家舍入),例如 0.25 会舍入为 0.3,而 0.23 可能仍显示为 0.2——但这不可靠,且无法保证「始终向下取整」。若业务要求对区间 [0.21, 0.29] 内所有值统一返回 0.2(即向零方向截断至十分位),必须显式设置舍入模式为 RoundingMode.DOWN。
✅ 正确做法如下:
import java.math.RoundingMode;
import java.text.DecimalFormat;
public class FloorToTenth {
public static void main(String[] args) {
DecimalFormat df2 = new DecimalFormat("#.#");
df2.setRoundingMode(RoundingMode.DOWN); // 关键:强制向下舍入(向零截断)
System.out.println(df2.format(0.21)); // 输出: 0.2
System.out.println(df2.format(0.25)); // 输出: 0.2
System.out.println(df2.format(0.29)); // 输出: 0.2
System.out.println(df2.format(0.37)); // 输出: 0.3(符合预期:0.3x → 0.3)
}
}⚠️ 注意事项:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
RoundingMode.DOWN表示「向零方向舍入」:正数向下截断,负数向上截断(如-0.25→-0.2); - 若需严格「向下取整」(即数学意义的 floor,如
-0.25→-0.3),应改用RoundingMode.FLOOR; -
DecimalFormat的格式模式"#.#"仅控制显示位数,不决定舍入逻辑;舍入行为完全由setRoundingMode()控制; - 此方案适用于展示层格式化;如需精确数值计算(如金融场景),建议改用
BigDecimal并调用setScale(1, RoundingMode.DOWN)。
总结:通过 df2.setRoundingMode(RoundingMode.DOWN),可确保所有介于 0.21–0.29 的输入均稳定输出 0.2,满足「最小保留值」的业务需求。
立即学习“Java免费学习笔记(深入)”;

















