替换格式化值中 DecimalFormat 的分组分隔符
Replace grouping separator of DecimalFormat in formatted value
我用 DecimalFormat df = new DecimalFormat("#,###.00");
格式化了一个 BigDecimal
。
现在,我想使用该格式化值(比如“1 250,00”)来创建 new BigDecimal
。我试过这个:
BigDecimal result = new BigDecimal(model.getValue().replace(",",".").replace(" ",""));
但是1250.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(" ",""));
您可以使用 DecimalFormat
对象中的 parse
方法。
df.setParseBigDecimal(true);
BigDecimal bigDecimal = (BigDecimal) df.parse(model.getValue());
查看this SO question中选择的答案。
按照你的格式
new DecimalFormat("#,###.00");
符号,
用于分组分隔符。从您的格式中删除符号 ,
后,您将获得输出 1250.00(在您的情况下没有分组分隔符 space) .
DecimalFormat df = new DecimalFormat("####.00");
BigDecimal example = new BigDecimal("1250");
String str = df.format(example);
System.out.println(str.replace(",",".").replace(" ",""));
Output: 1250.00
有替代的 (2nd) 解决方案,它可以在不改变格式“#,###.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);
Output: 1250.00
DecimalFormat
Javadoc 指定符号 ,
是分组分隔符。默认情况下,对于您的语言环境,此分隔符是 而不是 和 space,而是一个不间断的 space。这可以通过以下代码显示:
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, ""));
您可以使用 DecimalFormatSymbols
在您的模式中设置 分组分隔符(例如千位分隔符) 字符。看起来在您的语言环境中它是不间断的 space 所以尝试将其设置为正常 space 就像
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);
现在您的格式化程序将使用简单的 space,这样您就可以用您的代码替换它
System.out.println(str.replace(",", ".").replaceAll(" ", ""));
输出:1250.00
.
我用 DecimalFormat df = new DecimalFormat("#,###.00");
格式化了一个 BigDecimal
。
现在,我想使用该格式化值(比如“1 250,00”)来创建 new BigDecimal
。我试过这个:
BigDecimal result = new BigDecimal(model.getValue().replace(",",".").replace(" ",""));
但是1250.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(" ",""));
您可以使用 DecimalFormat
对象中的 parse
方法。
df.setParseBigDecimal(true);
BigDecimal bigDecimal = (BigDecimal) df.parse(model.getValue());
查看this SO question中选择的答案。
按照你的格式
new DecimalFormat("#,###.00");
符号,
用于分组分隔符。从您的格式中删除符号 ,
后,您将获得输出 1250.00(在您的情况下没有分组分隔符 space) .
DecimalFormat df = new DecimalFormat("####.00");
BigDecimal example = new BigDecimal("1250");
String str = df.format(example);
System.out.println(str.replace(",",".").replace(" ",""));
Output: 1250.00
有替代的 (2nd) 解决方案,它可以在不改变格式“#,###.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);
Output: 1250.00
DecimalFormat
Javadoc 指定符号 ,
是分组分隔符。默认情况下,对于您的语言环境,此分隔符是 而不是 和 space,而是一个不间断的 space。这可以通过以下代码显示:
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, ""));
您可以使用 DecimalFormatSymbols
在您的模式中设置 分组分隔符(例如千位分隔符) 字符。看起来在您的语言环境中它是不间断的 space 所以尝试将其设置为正常 space 就像
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);
现在您的格式化程序将使用简单的 space,这样您就可以用您的代码替换它
System.out.println(str.replace(",", ".").replaceAll(" ", ""));
输出:1250.00
.