Java中Double转String对齐小数点且无多余尾部零的内置方法问询
实现方案
方案1:兼容Java 8+,单语句实现无需自定义方法
先通过String.format生成保留8位小数的字符串,用正则去掉尾部零和多余的小数点,再做固定宽度对齐即可:
// 10为总宽度,按需调整即可 String result = String.format("%10s", String.format("%.8f", amount).replaceAll("(\\.\\d*?[1-9])0+$|\\.0+$", "$1"));
正则逻辑说明:
- 匹配到小数位末尾全零的情况,直接去掉小数点和所有尾部零
- 匹配到小数位有非零数字后带零的情况,只去掉后面的尾部零
方案2:基于DecimalFormat实现
你之前用DecimalFormat不符合要求是因为输出长度不固定导致小数点无法对齐,配合固定宽度格式化即可:
DecimalFormat df = new DecimalFormat("#.########"); // 关闭千分位分隔符,避免多余符号 df.setGroupingUsed(false); // 10为总宽度,按需调整即可 String result = String.format("%10s", df.format(amount));
如果需要严格保证小数点位置和你示例完全对齐,只需要对整数结果额外补对应空格即可,全部逻辑都可以通过JDK内置API实现,不需要新增自定义工具方法。
内容的提问来源于stack exchange,提问作者zappee
相关产品推荐
相关产品推荐

