Java 如何使用EU十进制分隔符将BigDecimal解析为文本,但结尾没有十进制数字?

Java 如何使用EU十进制分隔符将BigDecimal解析为文本,但结尾没有十进制数字?,java,parsing,bigdecimal,Java,Parsing,Bigdecimal,我需要能够将“1.000”字符串解析为一个值为1000 然后将同一个BigDecimal解析回“1.000”字符串 这两种情况都应该使用相同的DecimalFormatformatter。 为什么?因为我需要在每个阶段结束时比较两个字符串是否相等,这意味着解析是否正确 到目前为止,我试着使用这两种模式:DecimalFormat(“#######0”)和DecimalFormat(“0”),但它们不会在最后产生精确的“1.000” String str = "10,1"; str = str.r

我需要能够将
“1.000”
字符串解析为一个值为
1000
然后将同一个BigDecimal解析回
“1.000”
字符串

这两种情况都应该使用相同的
DecimalFormat
formatter。 为什么?因为我需要在每个阶段结束时比较两个字符串是否相等,这意味着解析是否正确

到目前为止,我试着使用这两种模式:
DecimalFormat(“#######0”)
DecimalFormat(“0”)
,但它们不会在最后产生精确的“1.000”

String str = "10,1";
str = str.replaceAll(",", ".");
System.out.println(str);
这是我的密码:

List<NumberFormat> formats = new ArrayList<NumberFormat>();
formats.add(DecimalFormat("###.##0,"));
formats.add(DecimalFormat("0,"));

for(NumberFormat format : formats) {
 Number number = format.parse(text);
 format.setParseIntegerOnly(false);
 if (number != null && format(format, number).equals(text)) {
  return true;
 }
}
List formats=new ArrayList();
格式。添加(十进制格式(“0”);
添加(十进制格式(“0”);
for(NumberFormat格式:格式){
Number=format.parse(文本);
format.setParseIntegerOnly(false);
if(number!=null&&format(format,number).equals(text)){
返回true;
}
}

> p>也许你应该考虑使用正则表达式来解决你的问题。 例如,你可以替换。最后加上000

String str = "10,1";
str = str.replaceAll(",", ".");
System.out.println(str);
这将打印“10.1”

编辑:


这就是你要找的吗?

我真的弄明白了。 我必须将模式定义为

DecimalFormat(“####,##0.”,新的DecimalFormatSymbols(Locale.derman))

DecimalFormat(“0.”,新的DecimalFormatSymbols(Locale.derman))

我必须把这个添加到NumberFormat对象中:

format.setParseIntegerOnly(false);

使其适用于欧盟号码。

问题出在哪里?当然
1.000,
不能是任何格式的有效号码。问题是format(format,number)调用不会返回“1.000”,这些格式的字符串听起来像是经典。你能解释一下你到底想做什么吗?哦,也许我不明白预期的结果。正确的格式是什么?预期的输出是“1.000”,我想使用DecimalFormat,因为我已经用这种方式定义了另外20种格式,所以regex将无法用于我正在尝试的工作。