2011-12-01 39 views
1

我在我的groovy应用程序中有一个java字符串变量。该变量包含价格的可能不同的货币格式的用户输入:从不同区域设置货币格式的字符串格式化

val = "1,250.50" 
val = "1.250,50" 
val = "1250,50" 
val = "1250.50" 

(etc.. I don't know if there are anymore funny way other countries write this) 

有没有办法来解析为适当的双精度值无论何种格式?目前看this,但不知道它是否会有所帮助。我目前的方法只适用于美国格式:

total = Double.parseDouble(val.replace('$','').replaceAll(",","").trim()) 

回答

1

你无法不知道什么用户将作为小数点分隔符使用,分组分隔符,解析它......。例如,如果我输入1,250,则不知道我是指一千二百五十(1,250.00)还是一点二百五十(1.250)。 这就是为什么Java的NumberFormat/DecimalFormat类允许您指定分组和小数点分隔符的原因。

你可以做的是希望用户输入使用与他的区域设置的约定他的价值观,并与JVM的当前Locale使用

NumberFormat.getInstance(Locale) 

注意:使用NumberFormat,您还可以解析货币。见NumberFormat#getCurrencyInstance

+0

谢谢。我刚刚意识到,不仅仅是因为他们在欧盟,他们将遵循欧盟的惯例,反之亦然。我花了一段时间才弄明白这一点:) –