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

时间:2015-09-03 11:32:57

标签: java bigdecimal decimalformat

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

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

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

但是,在1 250.00中1到2之间的space未被替换。我该如何解决?

示例:

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

4 个答案:

答案 0 :(得分:4)

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

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

您会看到打印的int为160,与ISO-8859-1中的"Non-breaking space"相对应。

要删除该字符,我们可以使用其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, ""));

答案 1 :(得分:2)

您可以使用parse对象中的DecimalFormat方法。

df.setParseBigDecimal(true);    
BigDecimal bigDecimal = (BigDecimal) df.parse(model.getValue());

this SO question中查看所选答案。

答案 2 :(得分:2)

以您的格式

new DecimalFormat("#,###.00"); 

符号,用于分组分隔符。从您的格式中删除符号,后,您会得到输出 1250.00 (在您的案例中没有分组分隔符空格)。

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

输出:1250.00

还有其他(第二)解决方案,无需更改格式即可使用#34;# ###。00"。使用DecimalFormat中的.setGroupingSize(0)

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

输出:1250.00

答案 3 :(得分:2)

您可以使用DecimalFormatSymbols在模式中设置分组分隔符(例如千位分隔符)字符。它看起来在您的语言环境中它是不间断的空间,因此请尝试将其设置为正常空间,如

DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.getDefault());
symbols.setGroupingSeparator(' ');//simple space

DecimalFormat df = new DecimalFormat("#,###.00", symbols);

BigDecimal example = new BigDecimal("1250");
String str = df.format(example);

现在,您的格式化程序将使用简单空间,以便您可以将其替换为代码

System.out.println(str.replace(",", ".").replaceAll(" ", ""));

输出:1250.00