如何使用Java String.format()将数字字符串格式化为3 551 280,00样式?
实现自定义金额格式化
要将字符串"355128000"格式化为"3 551 280,00",单纯依赖String.format()很难直接实现首数字后加空格的特殊分组规则,推荐结合数值转换和DecimalFormat来完成,具体代码如下:
import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; public class Main { public static void main(String[] args) { String amount = "355128000"; // 将原始字符串转为数值,把最后两位作为小数位 long rawValue = Long.parseLong(amount); double targetValue = rawValue / 100.0; // 自定义格式符号:设置分组分隔符为空格,小数分隔符为逗号 DecimalFormatSymbols symbols = new DecimalFormatSymbols(); symbols.setGroupingSeparator(' '); symbols.setDecimalSeparator(','); // 定义格式模式:首数字后单独分组,后续每3位一组,强制保留两位小数 DecimalFormat formatter = new DecimalFormat("# ##0.00", symbols); String formattedAmount = formatter.format(targetValue); System.out.println(formattedAmount); // 输出:3 551 280,00 } }
关键说明
- 数值转换:原始字符串
"355128000"对应实际金额3551280.00,因此先转成long再除以100得到带小数的数值。 - 格式模式:
# ##0.00的分组规则是从右往左每3位分隔,但开头的# ##会让首数字后先分出一个单独的数字,正好匹配"首数字后加空格,后续每3位一组"的格式要求。 - 符号自定义:通过
DecimalFormatSymbols替换默认的分组/小数分隔符,实现空格分组、逗号分隔小数的效果。
如果一定要使用String.format(),可以先通过DecimalFormat完成核心格式化,再结合String.format()做后续调整,但DecimalFormat已经能直接满足需求,无需额外步骤。
内容的提问来源于stack exchange,提问作者BAKHALED Ibrahim
相关产品推荐
相关产品推荐

