使用String.format()将long转String时保留前导零的问题咨询
解决String.format处理带前导零数字的问题
嘿,这个问题我之前踩过坑!核心原因其实很简单:long类型本身是不存储前导零的——当你把带前导零的数字(比如"0000123")转成long时,前导零会被直接丢弃,只剩下数值123,后续再用String.format处理自然没法还原前导零了。结合你的需求,给你两个可行的解决方案:
方案1:直接用字符串处理(推荐)
既然你的目标是保留原始的前导零格式,那最稳妥的方式就是不要把合同号的数字部分转成long,直接用字符串来拼接或格式化。
比如如果你的输入是拆分好的前缀和后缀:
String contractPrefix = "0000123"; String contractSuffix = "001"; String result = String.format("CONTRACT #: %s-%s", contractPrefix, contractSuffix); // 输出正好是 CONTRACT #: 0000123-001
如果你的原始输入就是完整的带格式字符串(比如"0000123-001"),那直接用就行,完全没必要转成long类型。
方案2:如果必须用数字类型,指定格式化补零规则
如果因为业务限制,你只能拿到long类型的数值(比如前缀对应的数值是123,后缀是1),但你明确知道它们的固定长度,那可以在String.format里指定补零的格式:
long contractNum = 123; long suffixNum = 1; // %07d 表示把数字格式化为7位,不足的用前导零补全;%03d 对应3位的后缀 String result = String.format("CONTRACT #: %07d-%03d", contractNum, suffixNum); // 输出 CONTRACT #: 0000123-001
这里的格式化规则解释下:
0:表示用零来填充空位7/3:表示最终字符串的总长度d:表示这是一个十进制整数
为啥你之前会得到错误输出?
你提到实际输出是CONTRACT #: 0000083-001,大概率是因为你把带前导零的字符串转成long时,误转了错误的数值(比如把"0000083"转成了long,而非预期的"0000123"),或者格式化时没有指定正确的补零长度,导致数值被错误地补零截断了。
内容的提问来源于stack exchange,提问作者devlperMoose
相关产品推荐
相关产品推荐

