如何为[0.0d,60.0d)区间的double值添加左侧零填充?
给[0.0, 60.0)区间的double数值补左侧前导零
需求是把0到60之间的double数值,整数部分不足两位的补前导零,同时保留小数部分的所有原始位数,示例如下:
0.1234567→00.12345675.12345678→05.1234567831.123456789→31.12345678959.0000000001....→59.0000000001....
实现思路
核心是拆分数值的整数部分和小数部分:
- 把double转为无科学计数法的字符串,避免极小小数出现
1E-9这类格式 - 按小数点分割字符串,分离整数部分和小数部分
- 把整数部分格式化为两位,不足两位自动补前导零
- 重新拼接整数部分和小数部分(如果有小数部分的话)
Java代码实现
public static String addLeadingZero(double num) { // 转为无科学计数法的字符串,确保小数部分完整保留 String numStr = new BigDecimal(String.valueOf(num)).toPlainString(); String[] splitParts = numStr.split("\\.", 2); // 格式化整数部分为两位,补前导零 String formattedInt = String.format("%02d", Integer.parseInt(splitParts[0])); // 拼接结果:有小数部分则加上小数点和小数段,否则只返回格式化后的整数 return splitParts.length == 2 ? formattedInt + "." + splitParts[1] : formattedInt; }
说明
- 用
BigDecimal.toPlainString()是为了避免double转字符串时出现科学计数法,比如0.000000001不会变成1E-9,保证小数部分能正确拆分 String.format("%02d", ...)会自动给一位数的整数补前导零,两位数的整数保持原样- 兼容整数形式的double值,比如
10.0会被格式化为10.0,0.0会变成00.0
内容的提问来源于stack exchange,提问作者Jin Kwon
相关产品推荐
相关产品推荐

