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

如何恢复Long类型转换时丢失的9位字符串前导零?

如何恢复因转换为Long类型而被截断的9位字符串中的所有前导零?

问题背景

前端API传入固定9位长度的字符串ID(如 "000000000"、"000000001"),但后端Java实体类SomeObject使用Long类型接收,导致前导零被自动截断。需要将转换后的Long值恢复为原9位带前导零的格式。

解决方案

1. 使用String.format()(推荐)

直接通过格式化字符串指定9位长度,自动补前导零:

public void someRequestHandlerMethod(List<SomeObject> someObjects) {
    for(SomeObject someObject : someObjects) {
        Long id = someObject.getId();
        // %09d 表示格式化为9位十进制数,不足位补0
        String formattedId = String.format("%09d", id);
        LOGGER.info("Id is: " + formattedId);
    }
}

该方式简洁高效,是Java中数字补前导零的常用写法,完全匹配需求:

  • 输入0 → 输出"000000000"
  • 输入1 → 输出"000000001"
  • 输入10 → 输出"000000010"

2. 使用DecimalFormat

如果需要复用格式化规则,可使用DecimalFormat定义固定格式:

import java.text.DecimalFormat;

public void someRequestHandlerMethod(List<SomeObject> someObjects) {
    // 9个0表示强制输出9位数字,不足补0
    DecimalFormat df = new DecimalFormat("000000000");
    for(SomeObject someObject : someObjects) {
        Long id = someObject.getId();
        String formattedId = df.format(id);
        LOGGER.info("Id is: " + formattedId);
    }
}

效果与String.format()完全一致,适合需要多次使用同一格式化规则的场景。

3. 手动拼接补零(不推荐)

虽然可以手动计算补零数量,但代码冗余易出错,仅作参考:

public void someRequestHandlerMethod(List<SomeObject> someObjects) {
    for(SomeObject someObject : someObjects) {
        Long id = someObject.getId();
        String idStr = id.toString();
        int neededZeros = 9 - idStr.length();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < neededZeros; i++) {
            sb.append("0");
        }
        sb.append(idStr);
        String formattedId = sb.toString();
        LOGGER.info("Id is: " + formattedId);
    }
}

注意事项

  • 9位数字的最大值为999999999,远小于Long类型的取值上限,因此不会出现溢出问题。
  • 优先使用前两种方案,代码简洁且符合Java标准规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:03:20