BigDecimal类型的数组转为字符串,并且去掉无效的0

方法一:

public String formatBigDecimalToString(BigDecimal num) {

if (ObjectUtils.isEmpty(num)) {

return "";

}

// stripTrailingZeros():去除末尾无用的0;toPlainString():避免科学计数法

String numStr = num.stripTrailingZeros().toPlainString();

//处理特殊情况:整数形式的字符串(如"4.0"→"4")

if (numStr.contains(".0")) {

numStr = numStr.replace(".0", "");

}

return numStr;

}

方法二:

/**

  • 扩展:先保留指定小数位,再去除末尾0 * @param num 待转换的BigDecimal * @param scale 保留的小数位数 * @return 格式化后的字符串 */
    public static String formatBigDecimalToString(BigDecimal num, int scale) {
    if (num == null) {
    return "";
    }
    // 步骤1:保留指定小数位(四舍五
    入)
    BigDecimal scaledNum = num.setScale(scale, BigDecimal.ROUND_HALF_UP);
    // 步骤2:去除末尾0 + 转普通字符串
    String result = scaledNum.stripTrailingZeros().toPlainString(); // 步骤3:处理.0结尾
    if (result.contains(".0")) {
    result = result.replace(".0", "");
    }
    return result;
    }
    // 测试:保留2位小数后去0
    public static void main(String\[\] args) { BigDecimal num = new BigDecimal("4.12300"); System.out.println(formatBigDecimalToString(num, 2)); // 输出:4.12
    }

注意:

(1)实际执行,不执行

if (result.contains(".0")) {

result = result.replace(".0", "");

}

也能让4.0000得到"4"。

(2)BigDecimal 的「标度(scale)」是指:数值的小数部分的位数(简单说就是 "小数点后有几位")。

(3)stripTrailingZeros() 方法的核心逻辑是:去除小数部分末尾的 0,但会尽量保留 "最小的有效标度",而非直接把标度设为 0。

分步拆解 4.0000 的标度变化

原始值 new BigDecimal("4.0000"):

数值逻辑:4.0000

标度(scale):4(小数点后 4 位);

调用 stripTrailingZeros() 后:

方法会删除末尾的 0,但为了 "标识这是一个带小数的数值(而非纯整数)",会保留最小的有效标度 1;

结果:数值逻辑仍为 4,但标度变为 1 → 表现形式为 4.0;

相关推荐
Hui Baby4 分钟前
MCP SSE协议发送注意
java
仙俊红9 分钟前
SpringBoot启动原理
java·spring boot·后端
星间都市山脉19 分钟前
Android STS(Security Test Suite)完整介绍与测试流程
android·java·linux·windows·ubuntu·android studio·androidx
namexingyun31 分钟前
拆解Fable 5三重安全护栏:模型路由、蒸馏防护与生物安全分类器的技术原理 - 微元算力(weytoken)
java·人工智能·python·安全·架构·ai编程
地铁潜行者41 分钟前
加了幂等表,为什么消息重试反而不执行了?聊聊 MQ 消费幂等的边界
java·后端
摇滚侠1 小时前
SpringMVC 入门到实战 视图解析器 44-48
java·spring·maven·intellij-idea
記億揺晃着的那天1 小时前
告别误操作!Spring Boot 多环境配置隔离与启动守卫实战
java·spring boot·后端·环境隔离
我是唐青枫2 小时前
Java Spring Data JPA 实战指南:Repository 查询、分页与实体映射
java·开发语言
染翰2 小时前
Nacos 切换 Namespace 后配置不生效、占位符报错终极复盘
java·后端·spring·nacos
terry6002 小时前
2026图形验证码服务商横向测评|口碑、接入、安全选型全指南
java·大数据·人工智能·web安全·信息与通信·数据库架构