2014-10-08 46 views
0

我需要能够将"1.000,"字符串解析为值为1000 的BigDecimal,然后将同一个BigDecimal解析回"1.000,"字符串。如何使用EU小数点分隔符将BigDecimal解析为文本,但最后没有十进制数字?

两者都应该使用格式相同的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; 
} 
} 
+0

问题在哪里? – Jens 2014-10-08 13:46:54

+2

当然'1.000,'不能是任何格式的有效数字。 – biziclop 2014-10-08 13:50:01

+0

问题是格式(格式,数字)调用不会让我回到任何这些格式化程序的“1.000”字符串 – goe 2014-10-08 13:50:06

回答

0

我其实已经想通了。 我不得不定义图案作为

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

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

,我不得不把它添加到的NumberFormat对象:

format.setParseIntegerOnly(false); 

,使之成为工作欧盟数字。

-1

也许你应该考虑使用正则表达式您的问题。

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

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

这将打印 “10.1”

编辑:

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 + ","; 

这是你在找什么?

+0

-1与期望的输出不匹配。 – 2014-10-08 14:01:26

+0

ow,也许我不明白预期的输出。什么是正确的? – Supamiu 2014-10-08 14:09:20

+0

期望的输出是“1.000”, – goe 2014-10-08 14:17:53

相关问题