gpt4 book ai didi

java - 替换格式化值中 DecimalFormat 的分组分隔符

转载 作者:搜寻专家 更新时间:2023-10-31 08:32:30 24 4
gpt4 key购买 nike

我使用 DecimalFormat df = new DecimalFormat("#,###.00"); 来格式化 BigDecimal

现在,我想使用该格式化值(比如“1 250,00”)创建 new BigDecimal。我试过这个:

BigDecimal result = new BigDecimal(model.getValue().replace(",",".").replace(" ",""));

但是 1 250.00 中 1 和 2 之间的 空格 没有被替换。我该如何解决?

例子:

DecimalFormat df = new DecimalFormat("#,###.00");
BigDecimal example = new BigDecimal("1250");
String str = df.format(example);
System.out.println(str.replace(",",".").replace(" ",""));

最佳答案

DecimalFormat Javadoc 指定符号 , 是分组分隔符。默认情况下,对于您的语言环境,此分隔符不是一个空格,而是一个不间断的空格。这可以通过以下代码显示:

DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.forLanguageTag("ru-RU"));
System.out.println((int) symbols.getGroupingSeparator());

你会看到打印出来的int是160,对应"Non-breaking space"在 ISO-8859-1 中。

要删除该字符,我们可以使用它的 Unicode representation并替换它:

DecimalFormat df = new DecimalFormat("#,###.00");
String str = df.format(new BigDecimal("1250"));
System.out.println(str.replace(",", ".").replace("\u00A0", ""));

对于更通用的解决方案,不依赖于当前语言环境,我们可以检索分组分隔符并直接使用它:

DecimalFormat df = new DecimalFormat("#,###.00");
String groupingSeparator = String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator());
String str = df.format(new BigDecimal("1250"));
System.out.println(str.replace(",", ".").replace(groupingSeparator, ""));

关于java - 替换格式化值中 DecimalFormat 的分组分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32374466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com