如何使用EU小数分隔符将BigDecimal解析为Text但最后没有十进制数?

时间:2014-10-08 13:44:41

标签: java parsing bigdecimal

我需要能够将"1.000,"字符串解析为值为1000的BigDecimal 然后将同一个BigDecimal解析回"1.000,"字符串。

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

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

这是我的代码:

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;
 }
}

2 个答案:

答案 0 :(得分:0)

我实际想出来了。 我不得不将模式定义为

DecimalFormat("###,##0.", new DecimalFormatSymbols(Locale.GERMAN))

DecimalFormat("0.", new DecimalFormatSymbols(Locale.GERMAN))

我必须将它添加到NumberFormat对象:

format.setParseIntegerOnly(false);

使其适用于欧盟号码。

答案 1 :(得分:-1)

也许你应该考虑使用Regex来解决你的问题。

你可以替换。并在最后添加000。

String str = "10,1";
str = str.replaceAll(",", ".");
System.out.println(str);

这将打印&#34; 10.1&#34;

编辑:

String str = "1.000,";
str = str.replaceAll(",", "");
str = str.replaceAll(".", "");
int bigDecimal = Integer.valueOf(str);
//first part is done
System.out.println(str);
String regex = "(\\d)(?=(\\d{3})+$)";
String result = bigDecimal.toString();
result = result.replaceAll(regex,".");
result = result + ",";

这是你在找什么?