我已使用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(" ",""));
答案 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
。