You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何将数值四舍五入保留n位小数 RoundingMode不生效如何解决

修正方案

问题根源

  • 浮点精度丢失:将字符串直接转换为Float单精度浮点型时,类似27.285的十进制小数无法被精确存储,转换后实际值略小于字面量,导致舍入判断出错。
  • 舍入模式不匹配:RoundingMode.UP为无条件进位模式,只要舍去部分非零就向前一位进1,不符合常规四舍五入逻辑,需改用RoundingMode.HALF_UP(舍去部分≥0.5时进位,否则舍去)。

可直接运行的修正代码

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;

public class RoundingTest {
    public static void main(String[] args) {
        // 三个测试输入
        String[] testVolumes = {"5.853", "27.285", "27.284"};
        DecimalFormat df = new DecimalFormat("#.##");
        // 配置为标准四舍五入模式
        df.setRoundingMode(RoundingMode.HALF_UP);
        
        for (String volume : testVolumes) {
            // 字符串直接转BigDecimal,完全规避浮点精度丢失问题
            BigDecimal decimal = new BigDecimal(volume);
            String result = df.format(decimal);
            System.out.println(result);
        }
    }
}

测试输出结果

  • 输入"5.853" → 输出"5.85"
  • 输入"27.285" → 输出"27.29"
  • 输入"27.284" → 输出"27.28"

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:15:04